SQLite常见API函数
sqlite3_open
sqlite3_prepare
sqlite3_exec
sqlite3_gettable
sqlite3_close
windows中sqlite3在工程中的配置:
1.目录下创建两个文件夹bin、lib
bin-sqlite3.dll
lib-sqlite3.lib
根目录下 -- sqlite3.h
2.修改qmake,.pro修改文件
RESOURCES += \
resources.qrc
# 加入sqlite3依赖
LIBS +=$$PWD/lib/sqlite3.lib
DESTDIR +=bin #后期QT打包
文件末尾
添加lb路径、可执行文件存在的路径bin目录下
打开数据库
int sqlite3_open(const char *,sqlite3 **db)
功能:打开或创建数据库,并通过输出参数返回“连接” 参数:
1、数据库文件【IN】
2、sqlite3 数据指针【out】
返回值:错误代码,
使用说明: typedef struct sqlite3 sqlite3;
头文件 #include <sqlite3.h>
//1.打开数据库
sqlite3 *pdb=nullptr;
int res=sqlite3_open("pro00.db",&pdb); //数据不存在创建数据库
if(res==SQLITE_OK)
{
qDebug()<<"open success";
}else{
qDebug()<<"open fail"<<sqlite3_errcode(pdb);
qDebug()<<"open fail"<<sqlite3_errmsg(pdb);
}
预编译SQL语句
函数原型: int sqlite3_prepare(sqlite3*, const char*, int, sqlite3_stmt**,const char**)
功能:预编译和解析SQL文本,准备执行
参数:
1、数据库连接指针【IN】
2、sql语句【IN】
3、sql语句最大字符数【IN】
4、处理后语句statement【out】
5、返回sql语句未使用部分的指针【out】
返回值:错误代码,参见SQLite错误代码
使用说明: //typedef struct sqlite3_stmt sqlite3_stmt; sqlite3_stmt *pstmt; sqlite3_prepare(db,”select * from tbl_test”,60,&pstmt,0);
结果集获取
函数原型: int sqlite3_step(sqlite_stmt *pstmt)
功能:执行SQL,返回结果集
参数:statement对象【IN】
返回值:错误代码,参见SQLite错误代码
使用说明: 返回SQLITE_ROW表示准备好一行的数据。 返回SQLITE_DONE表示执行完成,无数据。 如果只是执行SQL,则该函数只调用一次即可。
行数据获取
函数原型: int sqlite3_column_int(sqlite_stmt *pstmt,int col)
功能:获取某行数据中的各列值
参数:
1、pstmt-statement对象【IN】
2、col-列位置,从0开始编号
返回值:返回列值 使用说明:
相关函数: int sqlite3_column_count(sqlite3_stmt*); const unsigned char *sqlite3_column_text(sqlite3_stmt*, int iCol); double sqlite3_column_double(sqlite3_stmt*, int iCol);
绑定变量
函数原型: int sqlite3_bind_double(sqlite_stmt *pstmt,int ,double value)
功能:为预编译好statement设定参数
参数:
1、statement对象【IN】
2、传入的参数位置,从1开始编号
3、***表示类型,给参数设定的值
返回值:错误代码,参见SQLite错误代码
使用说明: 相关函数: int sqlite3_bind_int(sqlite3_stmt*, int, int); int sqlite3_bind_blob(sqlite3_stmt*, int, const void*, int n, void(*)(void*)) int sqlite3_bind_text(sqlite3_stmt*, int, const char*, int n, void(*)(void*));
获取错误代码
函数原型: int sqlite3_errcode(sqlite3 *db)
功能:返回最近一次调用API的错误代码
参数:sqlite3结构指针
返回值:错误代码,参见SQLite错误代码
执行SQL语句
函数原型: int sqlite3_exec(sqlite3 *db,const char *sql, sqlite3_callback, void *, char **errmsg) 功能:执行多条或一条SQL语句,并将结果传递给回调函数
参数:
1、数据库连接【IN】
2、要执行的sql语句【IN】
3、回调函数 【IN】
4、传递给回调函数的参数地址【IN】
5、返回的错误信息【out】
返回值:错误代码,参见SQLite错误代码
使用说明: typedef int (*sqlite3_callback)(void*,int,char**, char**);
执行 SQL 查询并获取结果的函数
函数原型:
int SQLite3_get_table(sqlite3*, const char *sql, char ***presult, int *nrow, int *ncolumn, char **errmsg)
功能:无需回调函数处理,直接查询结果集
参数:
1、数据库连接结构【IN】
2、SQL语句【IN】
3、结果集 【out】
4、行数【out】
5、列数【out】
6、错误信息【out】
返回值:错误代码,参见SQLite错误代码
使用说明: 相关函数: sqlite3_free_table(char **presult);
sqlite3 *pdb=nullptr;
QString sql=QString("SELECT * FROM tbl_user WHERE user_name='%1' and user_pwd=%2 and
user_status=0;").arg(username).arg(password);
char **qres=nullptr;
int row=0,col=0;
char * errmsg=nullptr;
//数据库指针 sql 结果集二维字符数组 行 字符数量 错误信息
res=sqlite3_get_table(pdb,sql.toUtf8(),&qres,&row,&col,&errmsg);
关闭数据库
函数原型: int sqlite3_close(sqlite3 *db) 功能:关闭数据库,释放资源
参数:1、数据库文件【IN】
返回值:错误代码
使用说明: 在不与数据库进行交互时,关闭数据库“连接”,并释放db所指向的内存区.
//3.关闭数据库
sqlite3_close(pdb);
最后有个大概得总体演示 用于我的例子中演示Qt结合Navicat
//1.打开数据库
sqlite3 *pdb=nullptr;
int res=sqlite3_open("pro00.db",&pdb); //数据不存在创建数据库
if(res==SQLITE_OK)
{
qDebug()<<"open success";
}else{
qDebug()<<"open fail"<<sqlite3_errcode(pdb);
qDebug()<<"open fail"<<sqlite3_errmsg(pdb);
}
//2.执行查询语句 6列8行数据
QString sql=QString("SELECT * FROM tbl_user WHERE user_name='%1' and user_pwd=%2 and user_status=0;")
.arg(username).arg(password);
qDebug()<<sql;
char **qres=nullptr;
int row=0,col=0;
char * errmsg=nullptr;
//数据库指针 sql 结果集二维字符数组 行 字符数量 错误信息
res=sqlite3_get_table(pdb,sql.toUtf8(),&qres,&row,&col,&errmsg);
if(res==SQLITE_OK)
{
qDebug()<<"执行sql成功";
if(row==1)
{
sql="update tbl_user set user_status=1 where user_name='"+username+"'";
//
res=sqlite3_exec(pdb,sql.toUtf8(),nullptr,nullptr,&errmsg);
if(res==SQLITE_OK)
{
sql="update tbl_user set user_status=1 where user_name="+username;
qDebug()<<sql;
QMessageBox::information(this,"登陆成功",username);
}else{
QMessageBox::information(this,"登录提示","账号已在其他位置登录");
}
}else{
QMessageBox::information(this,"登陆失败","账号名或密码错误");
}
}
//3.关闭数据库
sqlite3_close(pdb);
先查看数据库user_status的状态
进行登录操作
登录成功
再次查看hahaha的user_status的状态