SQLite3总结
来源:互联网 发布:自动填写表单软件 编辑:程序博客网 时间:2024/05/29 15:09
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])", print_result, NULL, &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;}elsecout<<"Open the database sqlite.db sucessfully"<<endl;sqlite3_exec(db, "CREATE TABLE linhui (fliename varchar(128) UNIQUE, fzip blob);", 0, 0, &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, 0, SEEK_END); //将fp指针退回到距离文件结尾0个字节处。filesize = ftell(fp); //函数 ftell() 用于得到文件位置指针当前位置相对于文件首的偏移字节数。fseek(fp, 0, 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;}elsecout<<"Open the database sqlite.db sucessfully"<<endl;sqlite3_exec(db, "CREATE TABLE linhui (fliename varchar(128) UNIQUE, fzip blob);", 0, 0, &zErrMsg);sqlite3_prepare(db, "select * from linhui;", -1, &stat, 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, sizeof(char), size, fp2); //将fp2的图片写进test中fclose(fp2);}sqlite3_finalize(stat);sqlite3_close(db);return 0;}
6、语法
清空表内数据
DELETE FROM 表
更新数据
UPDATE table_nameSET column1 = value1, column2=value2..., columnN = valueNWHERE [condition];
SQL模糊查询语句
SQL模糊查询,使用like比较字,加上SQL里的通配符,请参考以下:
1、LIKE'Mc%' 将搜索以字母 Mc 开头的所有字符串(如 McBadden)。
2、LIKE'%inger' 将搜索以字母 inger 结尾的所有字符串(如 Ringer、Stringer)。
3、LIKE'%en%' 将搜索在任何位置包含字母 en 的所有字符串(如 Bennet、Green、McBadden)。
4、LIKE'_heryl' 将搜索以字母 heryl 结尾的所有六个字母的名称(如 Cheryl、Sheryl)。
5、LIKE'[CK]ars[eo]n' 将搜索下列字符串:Carsen、Karsen、Carson 和 Karson(如 Carson)。
6、LIKE'[M-Z]inger' 将搜索以字符串 inger 结尾、以从 M 到 Z 的任何单个字母开头的所有名称(如 Ringer)。
7、LIKE'M[^c]%' 将搜索以字母 M 开头,并且第二个字母不是 c 的所有名称(如MacFeather)。
下面这句查询字符串,根据变量 zipcode_key 在邮政编码表 zipcode 中查询对应的数据,这句是判断变量 zipcode_key 为非数字时的查询语句,用 % 来匹配任意长度的字符串,从表中地址、市、省三列中查询包含关键字的所有数据项,并按省、市、地址排序。这个例子比较简单,只要你理解了方法就可以写出更复杂的查询语句。
sql = "select * from zipcode where (address like'%" & zipcode_key & "%') or (city like'%" & zipcode_key & "%') or (province like'%" & zipcode_key & "%') order by province,city,address
8、一个可视化数据库管理工具
NaviCat,功能强大,可以连接主流的数据库,非常好用
- SQLite3总结
- SQLITE3 使用总结(1)
- SQLITE3 使用总结(2)
- SQLITE3 使用总结(3)
- SQLITE3 使用总结(4)
- SQLITE3 使用总结(5)
- SQLITE3 使用总结
- SQLite3使用总结
- SQLITE3 使用总结
- SQLITE3 使用总结本
- SQLITE3使用总结
- SQLITE3使用总结
- SQLITE3使用总结
- SQLITE3 使用总结
- SQLITE3 使用总结
- SQLITE3 使用总结
- SQLITE3 使用总结
- SQLITE3 使用总结
- POJ 1230 Pass-Muraille (贪心)
- Java-IO笔记
- Android 漏洞分析入门 (一)
- android 7.1特性
- spark streaming 实现kafka的createDirectStream方式!!不坑
- SQLite3总结
- web.xml 中的listener、 filter、servlet 加载顺序及其详解
- 排序之简单插入排序(数组)
- 展讯芯片
- python 动态创建类 type
- Gallery Set与Probe set
- java语言实现ArrayList,LinkedList,Heap,Stack
- TCP/IP详解学习笔记(10)-TCP连接的建立与中止
- Hibernate框架工作流程