您的位置:首页 > 数据库

sqlite操作实例

2014-04-03 21:19 260 查看
后面的链接是对各个函数的理论介绍,建议互相结合来看点击打开链接

实例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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: