学习分享
1、sqlite3_exec函数
1.1、使用sqlite3_exec进行【查】操作
由于sqlite3_exec函数在使用时,需使用回调函数,回调函数为全局变量,程序的耦合性大大提升,不推荐使用该函数进行【查】操作。
#include <QApplication>
#include "sqlite3.h"
#include <QDebug>
#include <QString>
//全局变量
//返回数据 列数 结果集二维数组 列名
//回调函数,每查询到一次数据就执行,没有总的数据集
int callback(void * pdata,int col,char **value,char ** name)
{
qDebug()<<col;
for(int i=0;i<col;i++)
{
qDebug()<<name[i]<<":"<<value[i];
}
return 0;
}
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
sqlite3 * dbconnect=nullptr;
int res=sqlite3_open("./xxxxxx.db",&dbconnect);
if(res ==SQLITE_OK)
{
qDebug()<<"数据打开成功!";
}else
{
qDebug()<<"数据库打开失败!";
qDebug()<<sqlite3_errmsg(dbconnect);//打印错误信息
qDebug()<<sqlite3_errcode(dbconnect);//打印错误的代码
}
QString name= "hahaha",pwd="654321";
QString sql= QString("SELECT *FROM tbl_user WHERE user_name ='%1' AND user_pwd ='%2'").arg(name).arg(pwd);
qDebug()<<sql;
char * errmeg=nullptr;
res = sqlite3_exec(dbconnect,sql.toUtf8(),callback,nullptr,&errmeg);
if(res ==SQLITE_OK)
{
qDebug()<<"sql语句执行成功!";
}else
{
qDebug()<<sqlite3_errmsg(dbconnect);//打印错误信息
qDebug()<<sqlite3_errcode(dbconnect);//打印错误的代码
}
//2、关闭数据库
sqlite3_close(dbconnect);
return a.exec();
}
1.1.1、callback函数
1.2、使用sqlite3_exec进行【增、删、改】操作
#include <QApplication>
#include "sqlite3.h"
#include <QDebug>
#include <QString>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
sqlite3 * dbconnect=nullptr;
//1、打开数据库
int res=sqlite3_open("./xxxxxx.db",&dbconnect);
if(res ==SQLITE_OK)
{
qDebug()<<"数据打开成功!";
}else
{
qDebug()<<"数据库打开失败!";
qDebug()<<sqlite3_errmsg(dbconnect);//打印错误信息
qDebug()<<sqlite3_errcode(dbconnect);//打印错误的代码
}
QString sql1="update tbl_user set user_pwd ='121212' where user_name='hahaha';";
QString sql2="insert into tbl_user values(9,'alalal','123456',0,'2023-08-22 19:53:00');";
QString sql3="delete from tbl_user where user_id=7;";
char * errmeg=nullptr;
res = sqlite3_exec(dbconnect,sql1.toUtf8(),nullptr,nullptr,&errmeg);
if(res ==SQLITE_OK)
{
qDebug()<<"sql语句执行成功!";
}else
{
qDebug()<<sqlite3_errmsg(dbconnect);//打印错误信息
qDebug()<<sqlite3_errcode(dbconnect);//打印错误的代码
}
//2、关闭数据库
sqlite3_close(dbconnect);
return a.exec();
}
2、sqlite3_get_table函数
2.1、使用sqlite3_get_table函数进行【查】操作
#include <QApplication>
#include "sqlite3.h"
#include <QDebug>
#include <QString>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
sqlite3 * dbconnect=nullptr;
//1、打开数据库
int res=sqlite3_open("./xxxxxx.db",&dbconnect);
if(res ==SQLITE_OK)
{
qDebug()<<"数据打开成功!";
}else
{
qDebug()<<"数据库打开失败!";
qDebug()<<sqlite3_errmsg(dbconnect);//打印错误信息
qDebug()<<sqlite3_errcode(dbconnect);//打印错误的代码
}
char **qres =nullptr;
int row=0,col=0;
char*errmeg =nullptr;
QString sql1="SELECT * FROM tbl_user WHERE user_name ='alalal'";
int res =sqlite3_get_table(dbconnect,sql1.toUtf8(), &qres, &row, &col, &errmeg);
if(res ==SQLITE_OK)
{
qDebug()<<"sql语句执行成功!";
if(row>0)
{ //qres第一行就是字段名称,所以遍历是i从1开始
for(int i=0;i<=row;i++)
{
qDebug()<<qres[i*col]<<" "<<qres[i*col+1]<<" "<<qres[i*col+2]<<" "<<qres[i*col+3];
}
}
}else
{
qDebug()<<sqlite3_errmsg(dbconnect);//打印错误信息
qDebug()<<sqlite3_errcode(dbconnect);//打印错误的代码
}
//2、关闭数据库
sqlite3_close(dbconnect);
return a.exec();
}