QT 数据库之QSqlQuery类执行SQL语句

SQL即结构化查询语言,是关系数据库的标准语言。前面已经提到,在Qt中利用QSqlQuery类实现了执行SQL语句。需要说明,我们这里只是Qt教程,而非专业的数据库教程,所以我们不会对数据库中的一些知识进行深入讲解,下面只是对最常用的几个知识点进行讲解。

我们下面先建立一个工程,然后讲解四个知识点,分别是:

一,操作SQL语句返回的结果集。

二,在SQL语句中使用变量。

三,批处理操作。

四,事务操作。

我们新建Qt4 Gui Application工程,我这里工程名为data2,然后选中QtSql模块,Base class选QWidget。工程建好后,添加C++ Header File ,命名为connection.h ,更改其内容如下:

#ifndef CONNECTION_H
#define CONNECTION_H
#include <QMessageBox>
#include <QSqlDatabase>
#include <QSqlQuery>
#include <QtDebug>
#include <QtGui>
#include <qdebug.h>
static bool creatConnection()
{
    QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");//添加数据库驱动
    db.setDatabaseName(":memory:"); //数据库连接命名
    if(!db.open()) //打开数据库
    {
        qDebug("open is false");
        return false;
    }
    else
    {
        qDebug("open is OK");
    }
    QSqlQuery query(db); //以下执行相关QSL语句
    bool buscess=query.exec("create table person (id int primary key, firstname varchar(20), lastname varchar(20))");
    //新建person表,id设置为主键,一个firstname项,还有一个lastname项
    query.exec("insert into person values(101, 'Danny', 'Young')");
    query.exec("insert into person values(102, 'Christine', 'Holand')");
    query.exec("insert into person values(103, 'Lars', 'Gordon')");
    query.exec("insert into person values(104, 'Roberto', 'Robitaille')");
    query.exec("insert into person values(105, 'Maria', 'Papadopoulos')");
        //向表中插入5条记录
    if(!buscess)
    {
        qDebug("table is error");
    }
    else
    {
        qDebug("table is sucess");
    }
    return true;
}
#endif // CONNECTION_H
然后更改main.cpp的内容如下:

#include <QtGui/QApplication>
#include "widget.h"
#include "connection.h"
#include <QtSql>
#include <QtDebug>
#include <qdebug.h>
#include <QSqlQuery>
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    if(!creatConnection())
        return 1;
    Widget w;
    w.show();
    
    return a.exec();
}

可以看到,我们是在主函数中打开数据库的,而数据库连接用一个函数完成,并单独放在一个文件中,这样的做法使得主函数很简洁。我们今后使用数据库时均使用这种方法。我们打开数据库连接后,新建了一个人员表,并在其中插入了几条记录。

101 "Danny""Young"

102 "Christine" "Holand"

103 "Lars""Gordon"

104 "Roberto""Robitaille"

105 "Maria""Papadopoulos" 

表中的一行就叫做一条记录,一列是一个属性。这个表共有5条记录,id、firstname和lastname三个属性。程序中的“id int primary key”表明id属性是主键,也就是说以后添加记录时,必须有id项。

下面我们打开widget.ui文件,在设计器中向界面上添加一个Push Button ,和一个Spin Box 。将按钮的文本改为“查询”,然后进入其单击事件槽函数,更改如下。

void Widget::on_pushButton_clicked()
{
    QSqlQuery query;
    query.exec("select * from person");
    while (query.next())
    {
         qDebug() << query.value(0).toInt() << query.value(1).toString() << query.value(2).toString();
    }
}

我们在widget.cpp中添加头文件:

#include #include

然后运行程序,单击“查询”按钮,效果如下
在这里插入图片描述
可以看到在输出窗口,表中的所有内容都输出出来了。这表明我们的数据库连接已经成功建立了。

一,操作SQL语句返回的结果集。

在上面的程序中,我们使用query.exec(“select * from person”);来查询出表中所有的内容。其中的SQL语句“select * from person”中“*”号表明查询表中记录的所有属性。而当query.exec(“select * from person”);这条语句执行完后,我们便获得了相应的执行结果,因为获得的结果可能不止一条记录,所以我们称之为结果集。

结果集其实就是查询到的所有记录的集合,而在QSqlQuery类中提供了多个函数来操作这个集合,需要注意这个集合中的记录是从0开始编号的。最常用的有:

  • seek(int n) :query指向结果集的第n条记录。
  • first() :query指向结果集的第一条记录。
  • last() :query指向结果集的最后一条记录。
  • next() :query指向下一条记录,每执行一次该函数,便指向相邻的下一条记录。
  • previous() :query指向上一条记录,每执行一次该函数,便指向相邻的上一条记录。
  • record() :获得现在指向的记录。
  • value(int n) :获得属性的值。其中n表示你查询的第n个属性,比方上面我们使用“select * from person”就相当于“select id, firstname,lastname from person”,那么value(0)返回id属性的值,value(1)返回firstname属性的值,value(2)返回lastname属性的值。该函数返回QVariant类型的数据,关于该类型与其他类型的对应关系,可以在帮助中查看QVariant。
  • at() :获得现在query指向的记录在结果集中的编号。

需要说明,当刚执行完query.exec(“select * from person”);这行代码时,query是指向结果集以外的,我们可以利用query.next(),当第一次执行这句代码时,query便指向了结果集的第一条记录。当然我们也可以利用seek(0)函数或者first()函数使query指向结果集的第一条记录。但是为了节省内存开销,推荐的方法是,在query.exec(“select * from person”);这行代码前加上query.setForwardOnly(true);这条代码,此后只能使用next()和seek()函数。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Qt是一个跨平台的C++应用程序开发框架,它提供了丰富的功能和工具来简化应用程序的开发过程。在Qt中,可以使用QSqlQuery来创建和操作数据库。 QSqlQueryQt提供的用于执行SQL语句,它可以执行查询、插入、更新和删除等操作。下面是使用QSqlQuery创建数据库的一般步骤: 1. 首先,需要在Qt项目中添加数据库模块的支持。可以在项目文件(.pro)中添加如下代码: ``` QT += sql ``` 2. 在代码中包含QSqlQuery头文件: ``` #include <QSqlQuery> ``` 3. 创建数据库连接: ``` QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE"); db.setDatabaseName("database.db"); // 设置数据库名称 if (!db.open()) { // 处理数据库连接失败的情况 } ``` 4. 执行SQL语句: ``` QSqlQuery query; query.exec("CREATE TABLE IF NOT EXISTS students (id INT PRIMARY KEY, name TEXT, age INT)"); ``` 上述代码创建了一个名为"students"的表,包含id、name和age三个字段。 5. 可以通过QSqlQuery的其他方法来执行不同的SQL操作,例如插入数据、查询数据等。例如,插入一条数据: ``` query.prepare("INSERT INTO students (id, name, age) VALUES (:id, :name, :age)"); query.bindValue(":id", 1); query.bindValue(":name", "John"); query.bindValue(":age", 20); query.exec(); ``` 上述代码将一条id为1、name为"John"、age为20的记录插入到"students"表中。 6. 最后,记得在不需要使用数据库时关闭数据库连接: ``` db.close(); ``` 以上是使用QSqlQuery创建数据库的基本步骤。你可以根据具体需求使用QSqlQuery的其他方法来执行更复杂的数据库操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值