赞
踩
要使用sqlite数据库的API,需要满足两个条件:
目录
第一个参数 filename:数据库名称(输入型参数)。sqlite3命令创建数据库的时候,会生成一个数据库文件 xxx.db ,这里要填的就是该数据库文件的路径。
第二个参数ppDb:数据库操作句柄(输出型参数)。后续的增删查改操作都需要通过该句柄实现
返回值:成功返回 SQLITE_OK,失败返回错误码,可以使用sqlite3_errmsg函数获取错误信息。
- #include <sqlite3.h>
-
- #define DATABASE "/home/linux/myproject.db"
-
- sqlite3* db;
- if(sqlite3_open(DATABASE, &db) != SQLITE_OK){
- printf("%s\n", sqlite3_errmsg(&db));
- exit(1);
- }
参数是数据库操作句柄,如果关闭成功返回SQLITE_OK,如果数据库还处在使用状态,那就会关闭失败,此时返回 SQLITE_BUSY。
第一个参数 sqlite3:数据库操作句柄
第二个参数 sql:要执行的sql语句
第三个参数 callback:回调函数。只有在执行查询语句的时候,才会需要传参,其他执行语句,直接填NULL。只有在查询的时候,会返回查询结果,回调函数的参数大部分是输出型参数,用于返回查询结果。
第四个参数 args:给回调函数传递的参数。
第五个参数 errmsg:执行sql语句时产生的错误信息。
返回值:成功返回SQLITE_OK;失败返回错误码
- int callback(void* arg, int ncolumns , char** f_value, char** f_name)
- {}
-
- char** errmsg;
- if(sqlite3_exec(&db, "select * from project", callback, NULL, &errmsg) != SQLITE_OK)
- {
- printf("%s\n", errmsg);
- }
在查询的过程中,每查询到一条记录就会通过回调函数返回,而不是查询到所有数据再一起返回
int callback(void* arg, int ncolumns , char** f_value, char** f_name);
第一个参数 arg:sqlite_exec传递过来的参数
第二个参数 ncolumns:列数
第三个参数 f_value:某一个字段的所有内容
第四个参数 f_name:字段名称
除了使用 sqlite3_exec 来查询表格内容外,还可以使用 sqlite3_get_table 来直接获取到表格内容,该函数无需传入回调函数。
第一个参数 db:数据库操作句柄
第二个参数 zSql:要执行的sql语句
第三个参数 pazResult:查询到的表格数据。该指针指向的空间是动态开辟的,使用完以后,我们需要使用 sqlite3_free_table 来释放这块空间。
第四个参数 pnRow:查询结果的行数。即有多少条记录
第五个参数 pnColumn:查询结果的列数。即每一条记录有多少个字段
第六个参数 pzErrmsg:执行语句时产生的错误信息
返回值:成功返回SQLITE_OK;失败返回错误码
如果表格内容如下:
那么结果返回的内容如下:
- #include <stdio.h>
- #include <unistd.h>
- #include <sqlite3.h>
-
- #define DATABASE "/home/linux/myproject.db"
-
- int main(){
- sqlite3* db;
- // 1.打开数据库文件
- if(sqlite3_open(DATABASE, &db) != SQLITE_OK){
- printf("%s\n",(char*)sqlite3_errmsg(db));
- return 1;
- }
-
-
- // 2.新建一个表格
- char** errmsg;
- const char* sql = "drop table if exists project;\
- create table project(id integer, device char, code integer);";
- if(sqlite3_exec(db, sql, NULL, NULL, errmsg) != SQLITE_OK)
- {
- printf("%s\n", *errmsg);
- return 1;
- }
-
- // 3.插入一条记录
- sql = "insert into project values(1, '冰箱', 1001);";
- if(sqlite3_exec(db, sql, NULL, NULL, errmsg) != SQLITE_OK)
- {
- printf("%s\n", *errmsg);
- }
-
- // 4.修改记录
- sql = "update project set device='电饭煲' where id=1;";
- if(sqlite3_exec(db, sql, NULL, NULL, errmsg) != SQLITE_OK)
- {
- printf("%s\n", *errmsg);
- }
-
- // 5.查询记录
- sql = "select * from project;";
- char** sqlRes;
- int nRows;
- int nColumns;
- int i, j;
- if(sqlite3_get_table(db, sql, &sqlRes, &nRows, &nColumns, errmsg)==SQLITE_OK)
- {
- for(i = 0; i <= nRows; i++)
- {
- for(j = 0; j < nColumns; j++)
- {
- printf("%-11s", sqlRes[i*nColumns + j]);
- }
- printf("\n");
- }
- }
-
- // 6.删除一条记录
- sql = "delete from project where id=1;";
- if(sqlite3_exec(db, sql, NULL, NULL, errmsg) != SQLITE_OK)
- {
- printf("%s\n", *errmsg);
- }
-
- // 关闭数据库文件
- sqlite3_close(db);
- return 0;
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。