QT之SQL的使用

SQL类分成三层:

  • 用户接口层:这些类提供了基于数据的窗口部件,这些窗口部件不仅连接数据库还可为用户所浏览。Qt设计器集成了这些类并可用来创建基于数据的窗体。这些窗口部件可以在程序中与C++代码直接交互。支持这一层的类包括:QSqlEditorFactory, QSqlForm, QSqlPropertyMap, QDataTable, QDataBrowser和QDataView。
  • SQL应用编程接口层:这些类存取数据库。QSqlDatabase类用来连接数据库,数据交互的实现要么使用QSqlQuery类以SQL语句来实现,要么用QSqlCursor类,它封装了SQL命令集。除了QSqlDatabase, QSqlCursor和QSqlQuery这些类外,QSqlError, QSqlField, QSqlIndex和QSqlRecord也支持该层。
  • 驱动程序层:本层由三个类组成:QSqlResult, QSqlDriver和QSqlDriverFactoryInterface。这个层在数据库和SQL类之间提供了底层的桥梁。这个层的文档是另外的,因为它只和驱动程序编写者有关,并且在标准数据库应用程序编程中很少用到。

要在QT中使用SQL,首先需要包含sql模块:

QT       += core gui sql

可以先包含所要用到的头文件:

#include <QSqlDatabase>
#include <QDebug>
#include <QMessageBox>
#include <QSqlError>
#include <QSqlQuery>

用QSqlData::drivers()可以打印qt支持的数据库驱动:

qDebug() << QSqlDatabase::drivers();

当前支持的数据库如下:

Qt: Untested Windows version 10.0 detected!
("QSQLITE", "QMYSQL", "QMYSQL3", "QODBC", "QODBC3", "QPSQL", "QPSQL7")

我们使用的是MySQL数据库,所以先添加MySQL数据库:

QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");

然后连接本地数据库,这个表需要自己建,如果本地没有数据库则弹出个MessageBox,提示打开数据库失败:

//连接数据库
    db.setHostName("127.0.0.1");   //数据库服务器ip
    db.setUserName("root");        //数据库用户名
    db.setPassword("123456");      //密码
    db.setDatabaseName("info");    //使用哪个数据库

    //打开数据库
    if(!db.open())
    {
        QMessageBox::warning(this, "错误", db.lastError().text());
        return;
    }

往数据库里插入数据我们使用QSqlQuery类,它支持MySQL语句:

 //插入
QSqlQuery query;
query.exec("");  //sql语句

增(insert)

向数据库插入数据我们有不同的风格:

  1. odbc风格
//批量插入
//? 相当于点位符
query.prepare("insert into student(name, age, score) value(?, ?, ?)");

//给字段设置内容 list
QVariantList nameList;
nameList << "xiaoming" << "xiaolong" << "xiaojiang";
QVariantList ageList;
ageList << 11 << 22 << 33;
QVariantList scoreList;
scoreList << 59 << 69 << 79;

//给字段绑定相应的值 按顺序绑定
query.addBindValue(nameList);
query.addBindValue(ageList);
query.addBindValue(scoreList);

//执行预处理命令
query.execBatch();
  1. oracle风格
//占位符 : + 自定义名字
query.prepare("insert into student(name, age, score) value(:name, :age, :score)");

//给字段设置内容 list
QVariantList nameList;
nameList << "xiaom" << "xiao" << "xiang";
QVariantList ageList;
ageList << 11 << 22 << 33;
QVariantList scoreList;
scoreList << 89 << 91 << 99;

//给字段绑定
query.bindValue(":name", nameList);
query.bindValue(":score", scoreList);
query.bindValue(":age", ageList);

//执行预处理命令
query.execBatch();

//查
query.exec("select * from student");

while(query.next()) //一行一行遍历
{
    //取出当前行的内容
    //以列为单位的
    query.value(0).toInt();      //第0列
    query.value(1).toString();
    query.value("age").toInt();  //直接放字段名字也可以
    query.value("score").toInt();
}

待续。。。。。。。。。。。。。。

原文地址:https://www.cnblogs.com/coolcpp/p/qt-sql.html

时间: 2024-11-25 09:43:11

QT之SQL的使用的相关文章

qt调用sql server存储过程并获取output参数

最近新做的一个项目需要使用qt连接另一台机器上的sql server,虽然网上已有类似文章,但还是有些其中很少提及的问题,故在这里汇总下: qt连接sql server可以参考这篇文章,如果是连接另一台机器的sql server就不用执行第一步“开启ODBC驱动”了 http://www.cnblogs.com/shaolw/p/3411285.html 另外指定数据库用户名和密码可以使用Uid和Pwd,即原文dsn参数可以这样写: QString dsn = QString("Driver={

Qt之SQL数据库

---------------------------- http://blog.csdn.net/reborntercel/article/details/6991147 http://blog.csdn.net/fzu_dianzi/article/details/6959268 -------------------------------- 需要说明,当刚执行完query.exec(“select * from student”);这行代码时,query是指向结果集以外的,我们可以利用q

Qt的SQL操作,DELETE,SELECT

#include <QObject> #include <QSqlDatabase> #include <QSqlError> #include <QSqlQuery> #include <QString> class DatabaseManager : public QObject { public: DatabaseManager(QObject *parent = 0); ~DatabaseManager(); public: bool o

Qt SQL Programming 部分翻译

简介: Qt SQL 是 Qt 的重要模块之一,为了方便,Qt 对 SQL 进行了一系列的封装,并将 SQL API 分为如下三层: (1)驱动层 (2)SQL API 层 (3)用户接口层 目录: 一.使用前提 二.数据库类 三.连接到数据库 · SQL 数据库驱动 四.执行 SQL 语句 · Qt 支持的数据库系统的数据类型 五.使用 SQL Model 类 一.使用前提: (1)在C++文件中加入相应头文件 #include <QtSql> (2)在Qt 工程文件中加入Qt SQL 模块

[Qt教程] 数据库(六)SQL关系表格模型QSqlRelationalTableMode

导语QSqlRelationalTableModel继承自QSqlTableModel,并且对其进行了扩展,提供了对外键的支持.一个外键就是一个表中的一个属性和其他表中的主键属性之间的一对一的映射.例如,student表中的course属性对应的是course表中的id属性,那么就称属性course是一个外键.因为这里的course属性的值是一些数字,这样的显示很不友好,使用关系表格模型,就可以将它显示为course表中的name属性的值. 环境:Windows Xp + Qt 4.8.4+Qt

[Qt教程] 数据库(五)SQL表格模型QSqlTableModel

导语在上一篇我们讲到只读的QsqlQueryModel模型其实也可以实现编辑功能的,但是实现起来很麻烦.而QSqlTableModel提供了一个一次只能操作单个SQL表的读写模型,它是QSqlQuery的更高层次的替代品,可以浏览和修改独立的SQL表,并且只需编写很少的代码,而且不需要了解SQL语法. 环境:Windows Xp + Qt 4.8.4+QtCreator 2.6.2 目录一.创建数据库二.修改操作三.查询操作四.排序操作五.删除操作六.插入操作 正文 一.创建数据库 1.新建Qt

QT 全貌一栏

QT QT使创建独立于平台的数据库应用成为可能. QT的内建驱动支持Oracle,Microsoft SQL Server,Sybase Adaptive Server,IBM DB2,PostgreSQL,MySQL,BorlandInterbase,SQLite,以及各种ODBC的数据库.QT的数据库功能完全集成到了QT设计器中,能提供数据库的生动的预览.QT包括专门的数据库组件,并且任何内建的或自定义的组件都可以数据相关: QT普遍使用Unicode并且有良好的国际化支持.QT包括QT L

QT开发(四十六)——QT数据库编程基础

QT开发(四十六)--QT数据库编程基础 一.Qt SQL模块简介 1.Qt SQL模块简介 QT通过Qt SQL模块提供了对SQL数据库的支持,Qt SQL模块中的API分为三层:驱动层.SQL接口层.用户接口层. 如果要使用Qt SQL模块中的类,需要在工程文件(.pro文件)中添加QT += sql代码. 2.驱动层 驱动层为具体的数据库和SQL接口层之间提供了底层的桥梁,主要类包括Qt SQL模块中的QSqlDriver.QSqlDriverCreator.QSqlDriverCreat

第二章 Qt常用工具的介绍

(1)No.1 qmake 相信编写过Makefile的开发人员,随着工程中源码的级数递增和以类型.功能.模块组织源码的子目录的增多,都不愿意重复机械地手工编写这个工程管理文件.手写Makefile比较困难也容易出错.还没有编写过Makefile,甚至还不知道Makefile为何物的开发人员,也不用为此烦心,qmake可以方便地基于一个工程文件,生成不同平台下的Makefile.qmake关注编译器和处理器平台的依赖性,开发人员不用再手写针对不同编译器和不同处理器平台的Makefile,而可以花