相关API
打开
#include <sqlite3.h>
/**
* [sqlite3_open 如果数据库文件不存在则创建并打开数据文件,否则数据库文件存在直接打开数据库文件。 ]
* @param filename [数据库文件名(相对路径或者绝对路径),若文件名包含ASCII码表范围的之外的字符,则其必需是(UTF-8)编码]
* @param ppDb [数据库标识,此结构体为数据库操作句柄。通过此句柄可对数据库文件进行相应操作]
* @return [成功返回SQLITE_OK,失败返回错误号]
*/
int sqlite3_open(const char *filename,sqlite3 **ppDb);
int sqlite3_open16(const void *filename,sqlite3 **ppDb);
int sqlite3_open_v2(const char *filename,sqlite3 **ppDb,int flags,const char *zVfs);
实例
#include <stdio.h>
#include <sqlite3.h>
int main()
{
int ret;
sqlite3 *db;
/* 打开数据库文件my.db: 相当于执行命令sqlite3 my.db */
ret = sqlite3_open("my.db", &db);
if (ret != SQLITE_OK)
{
fprintf(stderr, "open my.db fail\n");
return -1;
}
printf("open my.db success\n");
}
关闭
#include <sqlite3.h>
int sqlite3_close(sqlite3 *db);
int sqlite3_close_v2(sqlite3 *db);
实例
#include <stdio.h>
#include <sqlite3.h>
int main()
{
int ret;
sqlite3 *db;
/* 打开数据库文件my.db */
ret = sqlite3_open("my1.db", &db);
if (ret != SQLITE_OK)
{
fprintf(stderr, "open my.db fail\n");
return -1;
}
/* 关闭数据库句柄 */
ret = sqlite3_close(db);
if (ret != SQLITE_OK)
{
fprintf(stderr, "close my.db fail\n");
return -1;
}
printf("close my.db success\n");
return 0;
}
获取错误消息
#include <sqlite3.h>
/*得到错误消息*/
const char *sqlite3_errmsg(sqlite3 *db);
操作表
#include <sqlite3.h>
/**
* [sqlite3_exec 执行sql指向SQL语句,实现对于数据库表的操作]
* @param db [db标识需要操作数据库文件的句柄]
* @param sql [需要执行的SQL语句]
* @param callback[
* 回调函数
* 参数1:arg是由sqlite3_exec的第4个参数传递过来的数据;
参数2:column标识所查询到的记录的列数;
参数3:key_value标识数据记录的字段值:
由一维数组存储,数组中的每一个元素类型都是char *,指向字段值;
参数4:key_name标识数据记录的字段名称:
由一维数组存储,数组中的每一个元素类型都是char *,指向字段值;
* ]
* @param arg [数据传递给回调函数的第1个参数]
* @param errmsg [
* 返回函数执行的错误消息
* errmsg是一个char类型指针,对于使用者只是定义了指针变量,没有具体指向,
在sqlite3_exec函数异常返回,此时可以访问errmsg指向的空间,
该空间是在sqlite3_exec函数内部动态开辟的空间,对于使用者需要手动释放。
* ]
* @return [成功返回SQLITE_OK,失败返回错误号]
*/
int sqlite3_exec(
sqlite3 *db, /* An open database */
const char *sql, /* SQL to be evaluated */
int (*callback)(void* arg,int column,char** key_value,char** key_name), /* Callback function */
void *arg, /* 1st argument to callback */
char **errmsg /* Error msg written here */
)
/**
* [sqlite3_free 动态释放数据库中动态开辟的空间]
* @param addr [需要释放的空间地址]
*/
void sqlite3_free(void*addr);
实例创建
int CreateTable(sqlite3 *db)
{
char sql[128];
char *errmsg;
/* 创建数据库表 */
/* 实现SQL语句的封装 */
sprintf(sql, "create table Stu(nu integer primary key, name text, age integer, score float);");
ret = sqlite3_exec(db, sql, NULL, NULL, &errmsg);
if (ret != SQLITE_OK)
{
fprintf(stderr, "create table fail : %s\n", errmsg);
return -1;
}
return 0;
}
实例插入
int InsertTable(sqlite3 *db, int nu, char *name, int age, float score)
{
int ret;
char sql[128];
char *errmsg;
/* 实现SQL语句的封装 */
sprintf(sql, "insert into Stu values(%d, '%s', %d, %f);", nu, name, age, score);
ret = sqlite3_exec(db, sql, NULL, NULL, &errmsg);
if (ret != SQLITE_OK)
{
fprintf(stderr, "insert table fail : %s\n", errmsg);
return -1;
}
printf("insert success\n");
return 0;
}
实例修改
int UpdataTable(sqlite3 *db, int nu, int age)
{
int ret;
char sql[128];
char *errmsg;
/* 封装SQL语句 */
sprintf(sql, "update Stu set age = %d where nu = %d;", age, nu);
ret = sqlite3_exec(db, sql, NULL, NULL, &errmsg);
if (ret != SQLITE_OK)
{
fprintf(stderr, "update table fail : %s\n", errmsg);
return -1;
}
printf("update success\n");
return 0;
}
实例删除
int DeleteTable(sqlite3 *db, int nu)
{
int ret;
char sql[128];
char *errmsg;
/* 封装SQL语句 */
sprintf(sql, "delete from Stu where nu = %d;", nu);
ret = sqlite3_exec(db, sql, NULL, NULL, &errmsg);
if (ret != SQLITE_OK)
{
fprintf(stderr, "delete table fail : %s\n", errmsg);
return -1;
}
printf("delete success\n");
return 0;
}
实例回调查询
/* 在查询数据的时候,需要自定义回调函数:在每查询到1条记录,自动调用1次回调函数 */
int callback(void *arg, int column, char **key_value, char **key_name)
{
int i;
for (i = 0; i < column; i++)
{
printf("%s:%s\n", key_name[i], key_value[i]);
}
return 0;
}
int SelectTable(sqlite3 *db)
{
int ret;
char sql[128];
char *errmsg;
/* 封装SQL语句 */
sprintf(sql, "select * from Stu;");
ret = sqlite3_exec(db, sql, callback, NULL, &errmsg);
if (ret != SQLITE_OK)
{
fprintf(stderr, "select table fail : %s\n", errmsg);
return -1;
}
printf("select success\n");
return 0;
}
非回调
#include <sqlite3.h>
/**
* [sqlite3_get_table 获取查询到的数据记录表]
* @param db [文件的句柄]
* @param zSql [SQL语句]
* @param pazResult [
* 得到是一维数组首元素地址;
首元素指向的字段数据(都是以字符串形式标识),所以首元素数据是char *类型数据;
也就是需要得到的是char**的指针;并且是通过函数的形参返回,所以形参类型是char ***;]
* @param pnRow [查询到记录的条数]
* @param pnColumn [查询到记录的列数]
* @param pzErrmsg [返回错误消息,在失败的开辟空间返回]
* @return [成功返回SQLITE_OK,失败返回错误号]
*/
int sqlite3_get_table(
sqlite3 *db, /* An open database */
const char *zSql, /* SQL to be evaluated */
char ***pazResult, /* Results of the query */
int *pnRow, /* Number of result rows written here */
int *pnColumn, /* Number of result columns written here */
char **pzErrmsg /* Error msg written here */
);
/*释放获取的数据表存储空间*/
void sqlite3_free_table(char **result);
网友评论