作者: zieckey ( zieckey@yahoo.com.cn )
All Rights Reserved
现在我们来写个C/C++程序,调用 sqlite 的 API 接口函数查询e数据库中表的内容。
下面是一个C程序的例子,显示怎么使用 sqlite 的 C/C++ 接口. 这个函数调用sqlite3_open() 在 22 行打开数据库, sqlite3_get_table 在 40 行执行 SQL 命令, 并且sqlite3_close() 在 47 行关闭数据库连接。
代码:
// name: query_test_1.c
// This file is used to test C/C++ API for sqlite
// Author : zieckey
// 2006/06/28
#include <stdio.h>
#include <sqlite3.h>
int main( void )
{
sqlite3 *db=NULL;
char *zErrMsg = 0;
int nrow = 0, ncolumn = 0;
char **azResult; //二维数组存放结果
int rc;
rc = sqlite3_open("zieckey.db", &db); //打开指定的数据库文件,如果不存在将创建一个同名的数据库文件
if( rc ){
fprintf(stderr, "Can't open database: %s/n", sqlite3_errmsg(db));
sqlite3_close(db);
exit(1);
}
else printf("open zieckey.db successfully!/n");
//也可以参考 sprintf 的用法
//char *sql = "SELECT SensorParameter FROM SensorData WHERE SensorID = 1";
char *sql = "SELECT * FROM SensorData ";
/*
int sqlite3_get_table(sqlite3*, const char *sql,char***resultp,int *nrow, int *ncolumn,char **errmsg);
result中是以数组的形式存放你所查询的数据,首先是表名,再是数据。nrow ,ncolumn分别为 查询语句返回的结果集的行数,列数,没有查到返回0
*/
sqlite3_get_table(db,sql,&azResult,&nrow,&ncolumn,&zErrMsg);
int i=0;
for(i=0;i<100;i++)
printf("%s/n",azResult[i]);
printf("row:%d column=%d /n",nrow,ncolumn);
printf("zErrMsg = %s /n", zErrMsg);
sqlite3_close(db); //关闭数据库
return 0;
}
编译:# gcc query_test_1.c -o db.out
也许会碰到类似这样的问题:
query_test_1.c:2:21: sqlite3.h: No such file or directory
query_test_1.c: In function `main':
query_test_1.c:6: error: `sqlite3' undeclared (first use in this function)
query_test_1.c:6: error: (Each undeclared identifier is reported only once