最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 正文

二十三、Qt数据库(三)利用QSqlQuery类执行SQL语句(一)

来源:动视网 责编:小OO 时间:2025-09-27 11:38:01
文档

二十三、Qt数据库(三)利用QSqlQuery类执行SQL语句(一)

SQL即结构化查询语言,是关系数据库的标准语言。前面已经提到,在Qt中利用QSqlQuery类实现了执行SQL语句。需要说明,我们这里只是Qt教程,而非专业的数据库教程,所以我们不会对数据库中的一些知识进行深入讲解,下面只是对最常用的几个知识点进行讲解。我们下面先建立一个工程,然后讲解四个知识点,分别是:一,操作SQL语句返回的结果集。二,在SQL语句中使用变量。三,批处理操作。四,事务操作。我们新建Qt4GuiApplication工程,我这里工程名为query,然后选中QtSql模块,Ba
推荐度:
导读SQL即结构化查询语言,是关系数据库的标准语言。前面已经提到,在Qt中利用QSqlQuery类实现了执行SQL语句。需要说明,我们这里只是Qt教程,而非专业的数据库教程,所以我们不会对数据库中的一些知识进行深入讲解,下面只是对最常用的几个知识点进行讲解。我们下面先建立一个工程,然后讲解四个知识点,分别是:一,操作SQL语句返回的结果集。二,在SQL语句中使用变量。三,批处理操作。四,事务操作。我们新建Qt4GuiApplication工程,我这里工程名为query,然后选中QtSql模块,Ba
SQL即结构化查询语言,是关系数据库的标准语言。前面已经提到,在Qt中利用QSqlQuery类实现了执行SQL语句。需要说明,我们这里只是Qt教程,而非专业的数据库教程,所以我们不会对数据库中的一些知识进行深入讲解,下面只是对最常用的几个知识点进行讲解。

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

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

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

三,批处理操作。

四,事务操作。

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

#ifndef CONNECTION_H

#define CONNECTION_H

#include

#include

#include

static bool createConnection()

{

    QSqlDatabase db = QSqlDatabase::addDatabase(“QSQLITE”);

    db.setDatabaseName(“:memory:”);

    if (!db.open()) {

        QMessageBox::critical(0, qApp->tr(“Cannot open database”),

            qApp->tr(“Unable to establish a database connection.”

                     ), QMessageBox::Cancel);

        return false;

    }

    QSqlQuery query;

    query.exec(“create table student (id int primary key, ”

               “name varchar(20))”);

    query.exec(“insert into student values(0, ‘first’)”);

    query.exec(“insert into student values(1, ’second’)”);

    query.exec(“insert into student values(2, ‘third’)”);

    query.exec(“insert into student values(3, ‘fourth’)”);

    query.exec(“insert into student values(4, ‘fifth’)”);

    return true;

}

#endif // CONNECTION_H

然后更改main.cpp的内容如下:

#include

#include “widget.h”

#include “connection.h”

int main(int argc, char *argv[])

{

    QApplication a(argc, argv);

   

    if (!createConnection())

        return 1;

   

    Widget w;

    w.show();

    return a.exec();

}

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

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

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

void Widget::on_pushButton_clicked()

{

    QSqlQuery query;

    query.exec(“select * from student”);

    while(query.next())

    {

        qDebug() << query.value(0).toInt() << query.value(1).toString();

    }

}

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

#include

#include

然后运行程序,单击“查询”按钮,效果如下:

可以看到在输出窗口,表中的所有内容都输出出来了。这表明我们的数据库连接已经成功建立了。

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

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

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

seek(int n) :query指向结果集的第n条记录。

first() :query指向结果集的第一条记录。

last() :query指向结果集的最后一条记录。

next() :query指向下一条记录,每执行一次该函数,便指向相邻的下一条记录。

previous() :query指向上一条记录,每执行一次该函数,便指向相邻的上一条记录。

record() :获得现在指向的记录。

value(int n) :获得属性的值。其中n表示你查询的第n个属性,比方上面我们使用“select * from student”就相当于“select id, name from student”,那么value(0)返回id属性的值,value(1)返回name属性的值。该函数返回QVariant类型的数据,关于该类型与其他类型的对应关系,可以在帮助中查看QVariant。

at() :获得现在query指向的记录在结果集中的编号。

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

下面将“查询”按钮的槽函数更改如下:

void Widget::on_pushButton_clicked()

{

    QSqlQuery query;

    query.exec(“select * from student”);

    qDebug() << “exec next() :”;

    if(query.next())

    //开始就先执行一次next()函数,那么query指向结果集的第一条记录

    {

        int rowNum = query.at();

        //获取query所指向的记录在结果集中的编号

        int columnNum = query.record().count();

        //获取每条记录中属性(即列)的个数

        int fieldNo = query.record().indexOf(“name”);

        //获取”name”属性所在列的编号,列从左向右编号,最左边的编号为0

        int id = query.value(0).toInt();

        //获取id属性的值,并转换为int型

       QString name = query.value(fieldNo).toString();

        //获取name属性的值

        qDebug() << “rowNum is : ” << rowNum //将结果输出

                << ” id is : ” << id

                << ” name is : ” << name

                << ” columnNum is : ” << columnNum;

    }

    qDebug() << “exec seek(2) :”;

    if(query.seek(2))

    //定位到结果集中编号为2的记录,即第三条记录,因为第一条记录的编号为0

    {

        qDebug() << “rowNum is : ” << query.at()

                << ” id is : ” << query.value(0).toInt()

                << ” name is : ” << query.value(1).toString();

    }

    qDebug() << “exec last() :”;

    if(query.last())

    //定位到结果集中最后一条记录

    {

        qDebug() << “rowNum is : ” << query.at()

                << ” id is : ” << query.value(0).toInt()

                << ” name is : ” << query.value(1).toString();

    }

}

然后在widget.cpp文件中添加头文件。

#include

运行程序,结果如下:

分类:Qt系列教程 作者: yafeilinux 日期: 四月 30th, 2010.    382 views

文档

二十三、Qt数据库(三)利用QSqlQuery类执行SQL语句(一)

SQL即结构化查询语言,是关系数据库的标准语言。前面已经提到,在Qt中利用QSqlQuery类实现了执行SQL语句。需要说明,我们这里只是Qt教程,而非专业的数据库教程,所以我们不会对数据库中的一些知识进行深入讲解,下面只是对最常用的几个知识点进行讲解。我们下面先建立一个工程,然后讲解四个知识点,分别是:一,操作SQL语句返回的结果集。二,在SQL语句中使用变量。三,批处理操作。四,事务操作。我们新建Qt4GuiApplication工程,我这里工程名为query,然后选中QtSql模块,Ba
推荐度:
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top