SQLite3总结
1、回调函数答应结果 void print_row(int n_values,char** values) { int i; for (i = 0; i < n_values; ++i) { //printf("%10s",values[i]); printf("%s ",values[i]); } printf("n"); } int print_result(void* data,int n_columns,char** column_values,char** column_names) { if (!column_names_printed) { print_row(n_columns,column_names); column_names_printed = 1; } print_row(n_columns,column_values); return 0; } 2、获取数据库所有表名 rc = sqlite3_exec(db,"select name from sqlite_master where type='table'",print_result,NULL,&errMsg); 3、获取表内所有字段名 rc = sqlite3_exec(db,"PRAGMA table_info([students])",&errMsg); 4、写入二进制数据 int savebin() { sqlite3 *db; sqlite3_stmt *stat; char *zErrMsg = 0; char buffer2[1024]="0"; int result; result = sqlite3_open("sqlite.db",&db); if(result) { cout<<"Open the database sqlite.db failed"<<endl; } else cout<<"Open the database sqlite.db sucessfully"<<endl; sqlite3_exec(db,"CREATE TABLE linhui (fliename varchar(128) UNIQUE,fzip blob);",&zErrMsg); //sqlite3_prepare()第一个参数跟前面一样,是个 sqlite3 * 类型变量,第二个参数是一个 sql 语句。这个 sql //语句特别之处在于values 里面有个 ? 号。在sqlite3_prepare函数里,?号表示一个未定的值,它的值等下才插入。 sqlite3_prepare(db,"insert into linhui values ('./images/5.bmp',?);",-1,&stat,0); FILE *fp; long filesize = 0; char * ffile; fp = fopen("./100.png","rb"); if(fp != NULL) { fseek(fp,SEEK_END); //将fp指针退回到距离文件结尾0个字节处。 filesize = ftell(fp); //函数 ftell() 用于得到文件位置指针当前位置相对于文件首的偏移字节数。 fseek(fp,SEEK_SET); //将fp指针指到距离文件头0个字节处。 ffile = new char[filesize+1]; //创建一个空间为dilesize大小的字符型数组。 size_t sz = fread(ffile,sizeof(char),filesize+1,fp); //将fp指针指向的文件读取filesize+1个大小的以char为元素单位大小,到ffile中。 fclose(fp); //关闭文件读取 } //sqlite3_bind_blob()函数中。?号的索引。前面prepare的sql语句里有一个?号,假如有多个?号怎么插入?方法就是改变 bind_blob 函数第2个参数。 //这个参数我写1,表示这里插入的值要替换 stat 的第一个?号(这里的索引从1开始计数,而非从0开始)。 //如果你有多个?号,就写多个 bind_blob 语句,并改变它们的第2个参数就替换到不同的?号。如果有?号没有替换,sqlite为它取值null。 //本函数是将图片保存到stat的表中。 sqlite3_bind_blob(stat,1,ffile,filesize,NULL); sqlite3_step(stat); //通过这个语句,stat 表示的sql语句就被写到了数据库里。 delete(ffile); sqlite3_finalize(stat); sqlite3_close(db); return 0; } 5、从库内读出二进制数据 int readbin() { sqlite3 *db; sqlite3_stmt *stat; char *zErrMsg = 0; char buffer2[1024]="0"; int result; result = sqlite3_open("sqlite.db",&db); if(result) { cout<<"Open the database sqlite.db failed"<<endl; return 0; } else cout<<"Open the database sqlite.db sucessfully"<<endl; sqlite3_exec(db,&zErrMsg); sqlite3_prepare(db,"select * from linhui;",0); sqlite3_step(stat); const void * test = sqlite3_column_blob(stat,1); int size = sqlite3_column_bytes(stat,1); sprintf(buffer2,"%s",test); FILE *fp2; fp2 = fopen("200.png","wb"); if(fp2 != NULL) { size_t ret = fwrite(test,size,fp2); //将fp2的图片写进test中 fclose(fp2); } sqlite3_finalize(stat); sqlite3_close(db); return 0; } 6、语法 清空表内数据 DELETE FROM 表
更新数据 UPDATE table_name SET column1 = value1,column2=value2...,columnN = valueN WHERE [condition];
SQL模糊查询语句
8、一个可视化数据库管理工具 NaviCat,功能强大,可以连接主流的数据库,非常好用
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |