sqlite3数据库怎么存储数组类型

sqlite3数据库怎么存储数组类型,第1张

/思路是把数组保存成blob格式

#include <stdioh>

#include <stdlibh>

#include <stringh>

#include "sqlite3h"

/#define DEBUG/

int main(int argc, char argv[]) {

int a[10] = {1,3,8,4,6,6,7,8,9};

int len;

len = sizeof(a[0])10;

#ifdef DEBUG

printf("%d\n",len);

#endif

sqlite3 db;

sqlite3_stmt stmt;

char sql,zErr;

int rc;

rc = sqlite3_open_v2(":memory:",&db,SQLITE_OPEN_CREATE|SQLITE_OPEN_READWRITE,NULL);

if(rc){

fprintf(stderr,"%s\n",sqlite3_errmsg(db));

return rc;

}

rc = sqlite3_exec(db,"create table if not exists test(array blob);",NULL,NULL,&zErr);

if(rc != SQLITE_OK){

fprintf(stderr,"%s\n",zErr);

sqlite3_free(zErr);

sqlite3_close(db);

return rc;

}

sql = "insert into test values();";

sqlite3_prepare_v2(db,sql,strlen(sql),&stmt,NULL);

sqlite3_bind_blob(stmt,1,a,len,SQLITE_STATIC);

sqlite3_step(stmt);

sqlite3_reset(stmt);

sql = "select from test;";

sqlite3_prepare_v2(db,sql,strlen(sql),&stmt,NULL);

sqlite3_step(stmt);

len = sqlite3_column_bytes(stmt,0);

int data = malloc(len);

memcpy(data,sqlite3_column_blob(stmt,0),len);

sqlite3_finalize(stmt);

sqlite3_close(db);

#ifdef DEBUG

printf("%d\n",sizeof(a[0]));

#endif

int i = 0;

while(i<(len/sizeof(a[0]))){

printf("a=%d, data=%d\n",a[i],(data+i));

i++;

}

system("pause");

return 0;

}

你应该new个String[]啊,你new id[]这怎么行?

如果你要取随机数,就用Mathrandom()随机范围,返回一个浮点类型。比如

int a =(int)(Mathrandom()10);返回10以内的随机数;

之后你就可以用a来做数组下标来取数组随机数了。

望采纳。。。。

不知到您用的是什么编程语言,不过可以按一下思路试试:

1。先将从数据库中取出的内容,按所属字段赋值给字符串变量(字符串变量的个数等于您取出内容包含的字段数目;

2定义数组;

3。根据字符串变量的个数为循环语句设置循环条件;

4执行循环语句,为数组的每个成员赋值。

保存字节数组到数据库分两步:

第一、利用FileInputStreamread(byte[])方法把内容读取到byte[]数组中,比如是由二进制数组成的,就可以定义为一个字节数组。

第二、在数据库中对应记录字段应该设置为blob类型,这样就能够顺利保存了

事例代码如下:

PreparedStatement stmt = connectiongeneratePreparedStatement("INSERT INTO ");

stmtsetBytes(1, yourByteArray);

其中,yourByteArray是你读出来的字符数组。

方法有很多,给你说两个常用的吧,都是基于关系型数据库的。如果你用面向对象数据库,那么直接就可以存进去了。这里假设你的数组元素是字符串。

直接把数组映射到关系型数据库中:建个表,只有两列,id和value。存的时候,数组下标对应的就是id,元素值就存到value列里面。

单数据值转换:数据库表有两列,name和value,name是数组变量名,value用来存这个数组。存之前,先把数组转成一个单一数据串,你可以转成单一字符串(例如["abc","def","ghi"]的形式),或者转成字节串,然后存到value列里面。读的时候可以利用动态编程的特性把这个字符串或字节串再赋值给相应的变量,就会直接转换回数组。现代编程语言大多数都支持动态编程,比如java、C#、Python等等。

无非就几种办法:

多行存储

字符分隔

字符分隔的变化:比如将字符串编码(base64或者其他)或者将字符串中的分隔符编码

(目前我使用的愚蠢的解决办法如下)

建立一个字符串字段——作为存储数组的字段

字符串是用以下的格式书写:

如果数组是12,2,28

就写成 @12@2@28@

如果数组是1,2,3,4,5

就写成 @1@2@3@4@5

到时候,我只需发出这样的查询字符串,就可以解决问题:

SELECT aa from bb WHERE aa like '%@2@%'

就可以找出来所有包含元素2 的数组了。

以上就是关于sqlite3数据库怎么存储数组类型全部的内容,包括:sqlite3数据库怎么存储数组类型、JAVA数组怎么存放数据库的元素、请教怎么将从数据库提出来的一列数据存入一个数组中等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/sjk/10138373.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-05
下一篇2023-05-05

发表评论

登录后才能评论

评论列表(0条)

    保存