sqlite操作实例
2014-04-03 21:19
260 查看
后面的链接是对各个函数的理论介绍,建议互相结合来看点击打开链接
实例1
有回调函数的操作实例
实例2
没有回调函数的操作实例
实例1
有回调函数的操作实例
#include <stdio.h> #include <sqlite3.h> int load_my_info(void *para, int n_column, char **column_value, char **column_name) { /* para是在sqlite3_exec里传入的 void* 参数 * 通过para参数,可以传入一些特殊的指针(比如类指针、结构指针), * 然后在这里面强制转换成对应的类型,然后操作这些数据 */ /* n_column 是这一条记录有多少个字段(多少列)*/ /* char **column_value * 是个关键值,查出来的数据都保存在这里,它实际上是1维数组(非二维), * 每一个元素都是一个 char * 值,是一个字段内容 */ /* char ** column_name 跟 column_value 是对应的,表示这个字段的名称 */ /* 此处,不使用para参数 */ int i; printf ("记录包含%d个字段\n", n_column); for (i = 0; i < n_column; i++) { printf ("字段名:%s\n\t字段值:%s\n", column_name[i], column_value[i]); } printf ("------------------------\n"); return 0; } int main(int argc, const char *argv[]) { sqlite3 *db; int result; char *errmsg = NULL; result = sqlite3_open ("/home/linux/sqlite_test.db", &db); if (SQLITE_OK != result) { printf ("open db error: %d\n", result); return -1; } /* create table */ result = sqlite3_exec (db, "create table my_table_1(ID integer primary key autoincrement, name nvarchar(32))", NULL, NULL, &errmsg); if (SQLITE_OK != result) { printf ("create table fail, errno: %d\n\terrmsg: %s\n", result, errmsg); return -1; } /* insert some data */ result = sqlite3_exec (db, "insert into my_table_1(name) values('走路')", 0, 0, &errmsg); if (SQLITE_OK != result) { printf ("insert data fail, errno: %d\n\terrmsg: %s\n", result, errmsg); } result = sqlite3_exec (db, "insert into my_table_1(name) values('坐汽车')", 0, 0, &errmsg); if (SQLITE_OK != result) { printf ("insert data fail, errno: %d\n\terrmsg: %s\n", result, errmsg); } /* query database */ result = sqlite3_exec (db, "select * from my_table_1", load_my_info, NULL, &errmsg); if (SQLITE_OK != result) { printf ("query data fail, errno: %d\n\terrmsg: %s\n", result, errmsg); } sqlite3_close (db); return 0; }
实例2
没有回调函数的操作实例
#include <stdio.h> #include <sqlite3.h> int main(int argc, const char *argv[]) { sqlite3 *db; int result; char *errmsg = NULL; char **db_result; int n_row, n_column; int i, j; int index; result = sqlite3_open ("/home/linux/sqlite_test.db", &db); if (SQLITE_OK != result) { printf ("open db error, errno: %d\n", result); return -1; } /* 假设数据库已经创建好了 */ /* 开始查询,传入的db_result已经是 char **, * 这里再加一个&取地址符,就成了所要求的了 */ result = sqlite3_get_table (db, "select * from my_table_1", &db_result, &n_row, &n_column, &errmsg); if (SQLITE_OK != result) { printf ("quert database error, errno: %d\n\terrmsg: %s\n", result, errmsg); return -1; } index = n_column; /* db_result前面第一行数据是字段名称, * 从 n_column 索引开始才是真正的数据, * 结合对 index++ 的讲解来理解 */ printf ("查到 %d 条记录\n", n_row); printf ("------------\n"); for (i = 0; i < n_row; i++) { printf ("第 %d 条记录\n", i + 1); for (j = 0; j < n_column; j++) { printf ("字段名:%s\n\t字段值: %s\n", db_result[j], db_result[index]); ++index; /* db_result 的字段值是连续的,从第0索引到第 n_column - 1 索引 * 都是字段名称,从第 n_column 索引开始,后面都是字段值, * 它把一个二维的表(传统的行列表示法)用一个扁平的形式来表示 */ } printf ("------------\n"); } /* 到这里,不论数据库查询是否成功,都释放 char** 查询结果,使用 sqlite * 提供的功能来释放 */ sqlite3_free_table (db_result); /* 关闭数据库 */ sqlite3_close (db); return 0; }
相关文章推荐
- oracle连接函数
- 【数据库】 mysql 指令
- windows7 sqlserver2012 无法写入受保护的内存 解决办法
- Ubuntu12.04 apt-get 安装mysql
- 《基于ORACLE的SQL优化读书》笔记 绑定变量窥探
- SQL临时表
- SQL临时表
- 使用PDO连接数据库 查询和插入乱码的解决方法
- 数据库连接 什么是长短连接??
- Mysql的优化
- Redis数据类型及其操作—Sorted sets
- oracle rowid 研究
- Mysql的 -v 操作
- mongodb的数据备份和恢复
- 批量杀死MySQL连接
- PHP连接数据库之PHP连接MYSQL数据库代码
- ppst 视频—— mysql 的语句的优化方法介绍
- 巧秒避开MySQL的字符骚扰
- Mysql的慢查询
- PDO方法连接数据库更加安全!