【SQLite】SQLite数据库使用与Qt的相关操作(三)

1.count函数

用来计算一个数据库表中的行数

比如下图中的计算查找到的电视剧片数

 2.limit子句

用于限制由 SELECT 语句返回的数据数量

1.限制了从表中提取的行数,比如下图中查询为2行

 2.如果我们想要偏移,不从头开始的话,可以有两种方法:

①逗号隔开,前面是偏移数,后面是显示数

②offset子句,前面是显示数,后面是偏移数

 3.Qt的Sqlite3环境搭建

1.文件放置

sqlite3.dll放在debug文件夹下和exe文件同级

sqlite3.h放在工程文件夹下和lib文件夹和debug文件夹同级

sqlite3.lib放在lib文件夹下

2.在.pro文件中加上以下代码

LIBS += $$PWD/lib/sqlite3.lib

3.测试,检验配置是否成功

首先看加入sqlite3头文件,写sqlite是否能弹出提示,

再看看能否运行sqlite3的API,这样,Qt的Sqlite3环境就搭建好了。

 4.Sqlite3常见的API操作

1. sqlite3_open(const char *filename, sqlite3 **ppDb)

打开或创建数据库,如上面配置所示 

如果文件名filename不为 NULL,那么 sqlite3_open() 将使用这个参数值尝试打开数据库文件;

如果该名称的文件不存在,sqlite3_open() 将创建一个新的命名为该名称的数据库文件并打开

2. sqlite3_exec(sqlite3*, const char *sql, sqlite_callback, void *data, char **errmsg)

sqlite3_exec()用于执行SQL语句,sqlite3_exec() 程序解析并执行由 sql 参数所给的每个命令,直到字符串结束或者遇到错误为止

int mySqlite3::mySqliteExec(QString mysql)
{
    char *zErrMsg = 0;
    int rc=sqlite3_exec(db,mysql.toStdString().c_str(),nullptr,nullptr,&zErrMsg);
    qDebug()<< sqlite3_errmsg(db);
    return rc;
}

 3. sqlite3_get_table(sqlite3 *db,const char *zSql,char ***pazResult,int *pnRow, int *pnColumn, char **pzErrmsg )

用于查询获取结果集

bool mySqlite3::getData(QString sql,char **&result,int &row,int &col)//获取结果集
{
    char *zErrMsg = 0;
    int rec=sqlite3_get_table(db,sql.toStdString().c_str(),&result,&row,&col,&zErrMsg);
    if(rec!=SQLITE_OK)
    {
        qDebug()<<sqlite3_errmsg(db);
        return false;
    }
    return true;
}

4. sqlite3_close(sqlite3*)

用于关闭数据库

mySqlite3::~mySqlite3()
{
    sqlite3_close(db);
}

5.数据库单例封装

1.单例模式(懒汉式)实现步骤

  • 构造函数私有化
  • 定义一个私有的静态的类对象指针
  • 在公有定义一个静态的get方法获取类对象指针

2.为什么使用单例模式?

  • 单例只有一个实例,可以减少系统资源开销
  • 提高创建速度,每次都获取已存在对象,且对象是全局共享的
  • 单例在系统中只有一个实例,避免不同对象重复打开数据库

部分源码:

#ifndef MYSQLITE3_H
#define MYSQLITE3_H
#include "sqlite3.h"
#include <QDebug>

class mySqlite3
{
public:
    ~mySqlite3();
    static mySqlite3* getInstance(QString filename);//静态的获取类对象指针方法
    int mySqliteClose();//手动关闭数据库 
    int mySqliteExec(QString mysql); //执行sql
    bool getData(QString sql,char **&result,int &row,int &col);//获取结果集
private:
    static mySqlite3* mySqlite;//静态的类对象指针
    mySqlite3(QString filename);//私有的构造函数
    sqlite3 *db;
};

#endif // MYSQLITE3_H

以上就是全部内容,如果对您有帮助,欢迎点赞评论,或者发现有哪里写错的,欢迎指正!

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

logani

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值