数据库编程(sqlite3 API)

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的状态

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值