赞
踩
- int sqlite3_open(const char *filename, sqlite3 **ppdb);
- int sqlite3_close(sqlite3 *db);
- int sqlite3_exec(sqlite3 *db, const char *sql, int (*sqlite3_callback)(void *,int, char**,char**), void *, char **errmsg);
- char *sqlite3_mprintf(const char*, va_list);
- int sqlite3_free(char *);
- int sqlite3_get_table(sqlite3 *, const char *sql, char **resultp, int *nrow, int *ncolumn, char **errmsg);
- void sqlite3_free_table(char **resultp);
前三个函数基本能满足所有对
sqlite3
数据库的操作,后四个可根据情选择使用。
- sqlite3 *db;
- sqlite_open("test.db", &db);
sqlite3_close(db);
- char *sql = NULL;
- sql = sqlite3_mprintf("delete from %s where %s = %d;", val1, val2, val3);
- ...
- sqlite3_free(sql);
- int callback_fun(void *para, int n_column, char **column_value, char ** column_name)
- {
- int i;
- printf("记录包含%d个字段(列)\n", n_column); //列数
- for(i = 0; i < n_column; i++)
- {
- printf("字段名:%s >> 字段值:%s\n", column_name, column_value);
- }
- return 0;
- }
5. 非回调查询
int sqlite3_get_table(sqlite3 *, const char *sql, char **resultp, int *nrow, int *ncolumn, char **errmsg);
void sqlite3_free_table(char **resultp);
sqlite3_get_table( )跟sqlite_free_table( )不管查询是否成功,它们必须成对使用,否则会造成内存泄露。
sqlite3_get_table( )形参说明:
sqlite3 *:sqlite3_open( )得到的sqlite3*指针。
const char *sql:要执行的标准sql语句。
char **resultp:保存字段的名称与值;resultp也是一个一维数组,它的内存布局是,第一行是字段名称,后面紧接是每个字段的值。
假如数据表一行数据记录包含3个字段:field1、field2、field3,各字段对应的值如下:
field1 field2 field3
val1_1 val2_1 val3_1
val1_2 val2_2 val3_2
则它们在resultp的内存分布如下:
resultp[0] | resultp[1] | resultp[2] | resultp[3] | resultp[4] | resultp[5] | resultp[6] | resultp[7] | resultp[8] |
field1 | field1 | field1 | val1_1 | val2_1 | val3_1 | val1_2 | val2_2 | val3_2 |
- int main(void)
- {
- sqlite3 *db;
- char *table_name = "test_table";
- char *sql = NULL;
- int ret, i, j;
-
- int n_row, n_column, index;
- char **dbresult;
- char *errmsg;
-
- ret = sqlite3_open("./test.db", &db);
- if(ret != SQLITE_OK)
- {
- return -1;
- }
-
- sql = sqlite3_mprintf("select * from %s;", table_name);
-
- ret = sqlite_exec(db, sql, &dbresult, &n_row, &n_column, &errmsg);
- if(ret != SQLITE_OK)
- {
- printf("error:%s\n", errmsg);
- return -1;
- }
-
- index = n_column;
- printf("查到%d行记录\n", n_row);
- for(i = 0; i < n_row; i++)
- {
- printf("第%d行记录\n", i+1);
- for(j = 0; j < n_column; j++)
- {
- printf("字段名:%s >> 字段值:%s\n", dbresult[j], dbresult[index]);
- index++;
- }
- }
- sqlite3_free_table(dbresult);
- sqlite3_free(sql);
-
- reutrn 0;
- }
-
参考资料:
http://blog.csdn.net/shyodx/article/details/6901812
http://blog.chinaunix.net/uid-9255716-id-107972.html
http://hi.baidu.com/zzf6222009/blog/item/8a654c51c0cfb2d8b645ae28.html
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。