QtSql模块提供了一个平台无关且数据库无关的访问SQL数据库的接口。

Qt中的每个数据库连接用一个QSqlDatabase对象来表示;Qt使用不同driver来和各种不同数据库的API进行通讯。

QSqlQuery提供了直接执行任意SQL语句的特性;此外还提供了两个高层次的无需SQL命令的数据库接口:QSqlTableModel和QSqlRelationalTableModel
Section 1. Connecting and Querying

在执行SQL命令前,必须先建立好同数据库的连接。

静态函数QSqlDatabase::addDatabase()用于创建一个新的QSqlDatabase对象,函数的第一个参数指定了Qt该选择哪个Driver来访问数据库。

在对创建的QSqlDatabase对象设定好host name,database name ,username和password后,需要调用open()函数来建立到数据库的连接。

一旦到数据库的链接建立好后,就可以通过QSqlQuery::exec()来执行底层数据库所支持的任意SQL语句了。

QSqlQuery::next()返回查询结果集中的下一行,而QSqlQuery::value()则返回当前行中的某一项的值,以QVariant的形式返回。

可以使用QSqlQuery::isActive()来检查SQL语句的执行是否出现错误。

placeholder
    QSqlQuery::prepare() 
    QSqlQuery::bindValue() or QSqlQuery::addBindValue()
    QSqlQuery::exec()

Qt支持数据库中transaction(事务)这个概念。transaction()用于启动transaction,而commit()或rollback()用于结束transaction。

静态函数QSqlDatabase::database(),返回指定连接所对应的QSqlDatabase对象。

QSqlDatabase::driver() 返回该连接底层所使用的dirver
    QSqlDatabase::hasFeature()可用来查询底层数据库是否支持某项特性。

Qt允许在一个程序中创建多个数据库连接,这中情况下在执行SQL语句时,需要为QSqlQuery的构造函数传入要执行该语句的数据库对应的QSqlDatabase对象。

与QSqlQuery相比,QSqlTableModel提供了一个更高层次、更抽象的接口,可以避免使用原始的SQL命令。

QSqlTableModel::record() & QSqlTableModel::value()

QSqlTableModel::insertRow() & QSqlTableModel::setData()

QSqlTableModel::submitAll() ,于其他model不同,在使用QSqlTableModel时,必须调用submitAll()来强制所有的修改都写入数据库。

当需要处理外键(foreign key)时,需要使用QSqlRelationalTableModel而不是QSqlTableModel。

对于使用了SQL相关类的应用程序,需要在对应的.pro中添加下面一行:"QT     +=sql",这样在链接时会将QtSql库链入。

Qt数据库编程_基本的更多相关文章

  1. Qt数据库编程1

    Qt中数据编程主要分为以下两点:1.利用qt提供类 访问数据库或者成为简单的数据库编程2.数据库编程中引入model/view编程模型 qt中数据库编程的步骤: 1.加载数据库驱动 QSqlDatab ...

  2. QT 数据库编程三

    //mainwindow.cpp #include "mainwindow.h" #include "logindlg.h" #include "sc ...

  3. Qt——数据库编程

    一.概述 Qt提供了一个类似JDBC的数据库接口,需要为每个可以连接的特定数据库提供驱动程序,可以通过 QStringList QSqlDatabase::drivers() 知道当前版本的Qt哪些驱 ...

  4. QT 数据库编程四

    //vmysql.cpp #include "vmysql.h" #include <QMessageBox> Vmysql::Vmysql() { mysql_ini ...

  5. QT 数据库编程二

    //logindlg.cpp #include "logindlg.h" #include <QGridLayout> #include <QHBoxLayout ...

  6. QT基于model/view数据库编程2

    Qt中数据编程主要分为以下两点:1.利用qt提供类 访问数据库或者成为简单的数据库编程2.数据库编程中引入model/view编程模型 基于model/view数据库编程: qt提供model类: Q ...

  7. Qt数据库_资料

    1. QT笔记_数据库总结(一)-rojian-ChinaUnix博客.html http://blog.chinaunix.net/uid-28194872-id-3631462.html (里面有 ...

  8. VB.NET数据库编程基础教程

    关键词:作者罗姗   众所周知,VB.NET自身并不具备对数据库进行操作的功能,它对数据库的处理是通过.NET FrameWork SDK中面向数据库编程的类库和微软的MDAC来实现的.其中,ADO. ...

  9. Vc数据库编程基础MySql数据库的表查询功能

    Vc数据库编程基础MySql数据库的表查询功能 一丶简介 不管是任何数据库.都会有查询功能.而且是很重要的功能.上一讲知识简单的讲解了表的查询所有. 那么这次我们需要掌握的则是. 1.使用select ...

随机推荐

  1. Vivado Bit文件压缩

    前言 Vivado编译生成的Bit文件太大,想要小一点该咋办呢?那么就需要给bit文件瘦身. 流程 直接在约束文件xdc中添加下述语句即可: set_property BITSTREAM.GENERA ...

  2. Java面试容器,collection,list,set

      1.容器指的是可以容纳其他对象的对象. 2.collection/set/list的联系和区别? (1)collection是Java集合顶级接口,存储一组不唯一,无序的对象: (2)list接口 ...

  3. 深度学习_1_神经网络_4_分布式Tensorflow

    分布式Tensorflow 单机多卡(gpu) 多级多卡(分布式) 自实现分布式 API: ​ 1,创建一个tf.train.ClusterSpec,用于对集群的所有任务进行描述,该描述对于所有任务相 ...

  4. 从win到多系统

    相信有不少电脑爱好者喜欢折腾系统,尤其还是一个小白(感觉多系统强的不要不要的,各种崇拜),然后就走上了深渊. 首先,我一开始也是个win系统的忠实用户,没用过其他系统的我几乎不知道其他系统的存在,反正 ...

  5. PAT Basic 1080 MOOC期终成绩 (25 分)

    对于在中国大学MOOC(http://www.icourse163.org/ )学习“数据结构”课程的学生,想要获得一张合格证书,必须首先获得不少于200分的在线编程作业分,然后总评获得不少于60分( ...

  6. java学习笔记16-抽象类

    抽象类: 定义了一系列的属性和方法的类.抽象方法是不能直接实现功能.需要通过继承去实现具体方法.为了将静态的业务流程跟动态的实现分开. 工厂生产产品时,都需要准备材料,执行组装,产品销售等流程.但是对 ...

  7. Please, commit your changes or stash them before you can merge. Aborting

    1.stash 通常遇到这个问题,你可以直接commit你的修改:但我这次不想这样. 看看git stash是如何做的. git stash    git pull    git stash pop ...

  8. nginx配置跨域之后每次访问会发送两次请求

    公司项目从前后端不分离转到前后端分离 首先遇到的问题就是前后端分离的时候跨域的问题 但是当跨域成功配置并且能访问成功的时候发现 每次客户端的请求都会发送两次 第一次是OPTIONS的请求,然后才是正常 ...

  9. python utf8

    1. # coding:utf-8 作用是定义源代码的编码. 如果没有定义, 此源码中是不可以包含中文字符串的.PEP 0263 -- Defining Python Source Code Enco ...

  10. Java中String为什么是不可变

    什么是不可变对象? 众所周知, 在Java中, String类是不可变的.那么到底什么是不可变的对象呢? 可以这样认为:如果一个对象,在它创建完成之后,不能再改变它的状态,那么这个对象就是不可变的.不 ...