QT--SQLite:查询、添加

1、前置条件

模块

QT    +=  sql

头文件

#include <QSqlDatabase>
#include <QSqlQuery>
#include <QSqlRecord>
QSqlDatabase:
    QSqlDatabase是数据库连接管理类,用于建立和管理与数据库的连接。
    它提供了静态方法来创建、关闭和访问数据库连接。
    QSqlDatabase可以通过添加数据库驱动程序(如SQLite、MySQL等)来连接各种类型的数据库。
    它还提供了一些方法来设置数据库连接参数、执行事务等。

QSqlQuery:
    QSqlQuery用于执行SQL查询语句并获取结果。
    它可以执行各种SQL操作,如SELECT、INSERT、UPDATE、DELETE等。
    QSqlQuery提供了方法来绑定参数、执行查询、获取结果集、获取查询状态等。
    它还支持对结果集进行遍历和访问,以获取查询结果的行和列数据。

QSqlRecord:
    QSqlRecord是用于描述数据库表中每个字段(列)的元数据的类。
    它包含了字段的名称、数据类型、长度等信息。
    QSqlRecord通常与QSqlQuery配合使用,用于获取和处理查询结果的元数据。
    它提供了方法来获取字段数量、字段名称、字段类型等信息。

QSqlDatabase负责管理数据库连接
QSqlQuery负责执行SQL查询并获取结果
QSqlRecord用于描述数据库表的字段元数据。

连接数据库

数据库名称:dbfile.db

QSqlDatabase sqldb;
sqldb = QSqlDatabase::addDatabase("QSQLITE");//添加驱动
    sqldb.setDatabaseName("dbfile.db");
    if (sqldb.open() == false)
    //sqldb.open()打开数据库,返回bool值
    {
        QMessageBox::critical(0, "error", "Database opening failed!");
    }
    else
    {
        QMessageBox::information(0,"成功","成功!");
    }
}

上述代码首先添加了驱动,然后设置了数据库名称,最后连接到数据库
注意:即使没有预先创建.db文件也不会打开失败,因为没有它会自己创建一个,文件的位置一般和.exe同目录,使用MSVC时可能会在上一级;

2、条件查询

    QSqlDatabase db = QSqlDatabase::database();  // 获取已打开的数据库连接
    if (db.isOpen()) {
        QSqlQuery query(db);
        query.prepare("SELECT DateTime FROM table WHERE Number_1 = ? AND Number_2 = ?");
        //query.prepare(QString("SELECT DateTimeH_M_S FROM WaveformRecord WHERE Number_1 = %1 AND Number_2 = %2").arg("0").arg("1"));
        query.bindValue(0, _number1);  // 设置 Number_1 的条件值为 0
        query.bindValue(1, _number2);  // 设置 Number_2 的条件值为 1

        if (query.exec()) {
            while (query.next()) {
                QString dateTimeHMS = query.value(0).toString();
            }
        } 
        else 
        {
        }
    }

基本流程如上,先获取连接,给到QSqlQuery。然后使用prepare函数添加要执行的语句,这里可以像上面一样通过bindValue添加变量,也可以通过字符串直接添加(注释所示) ,这里我的两个Number数据类型是integer,如果数据类型是text,则需要将内容用单引号’ '引上。

最后通过exec函数执行,next函数进行移动,value函数获取内容,这样就通过遍历获取到了所查询的内容

exec()函数:
    exec()函数用于执行SQL查询语句,并返回其执行结果。
    它接受一个包含有效SQL语句的QString作为参数。
    当执行成功时,exec()函数返回true;当执行失败时,返回false。
    在执行SELECT查询时,通过exec()函数获取结果集,可以使用next()函数来遍历结果。

next()函数:
    next()函数用于在执行SELECT查询后,逐行移动到结果集中的下一行数据。
    它返回一个布尔值,指示是否成功移动到下一行。
    在每次调用next()函数之前,需要确保exec()函数已经成功执行并返回了结果集。
    可以在循环中使用next()函数来遍历结果集,直到遍历完所有行或得到所需的数据。
    
value()函数:
	QSqlQuery的value()函数用于从查询结果集中获取指定字段的值。
	该函数有多个重载形式,可以根据需要选择适合的形式。以下是常用的两种形式:

QVariant value(int index) const:
    通过索引获取字段的值。
    参数index表示结果集中字段在查询语句中的顺序位置,从0开始计数。
    返回一个QVariant对象,可以根据具体的字段类型使用toXXX()方法将其转换为相应的数据类型。

QVariant value(const QString& name) const:
    通过字段名称获取字段的值。
    参数name表示结果集中字段的名称,与查询语句中SELECT子句中的列名对应。
    返回一个QVariant对象,可以根据具体的字段类型使用toXXX()方法将其转换为相应的数据类型。

3、插入内容

// 获取数据库连接
    QSqlDatabase db = QSqlDatabase::database();

    // 插入数据
    QSqlQuery query;
    query.prepare("INSERT INTO table (Number_1, DateTimeY_M_D, Number_2, DateTimeH_M_S, Name) "
                  "VALUES (:number_1, :dateYMD, :number_2, :dateHMS, :name)");
    query.bindValue(":number_1", _number_1);
    query.bindValue(":dateYMD", _strYMD);
    query.bindValue(":dateHMS", _strHMS);
    query.bindValue(":number_2", _number_2);
    query.bindValue(":name", _name);

    if(query.exec())
    {
        qDebug() << "数据插入成功!";
        return true;
    }
    else
    {
        qDebug() << "数据插入失败!";// << query.lastError().text();
        return false;
    }

比查询还简单点,插入操作执行完就没有后续了,少了循环遍历结果的部分。
删除、修改操作也是同理

qt关于sqlite的简单内容就这些,增删改查,用到的类和函数只有几个,唯一需要注意的就是sql语句了,毕竟错了编译器检查不出来,要细心点

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值