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库链入。

最新文章

  1. [USACO14OPEN] Dueling GPS's[最短路建模]
  2. android 不同dpi图标大小
  3. weblogic启动失败:Could not obtain the localhost address 解决办法
  4. Java学习随笔4:Java的IO操作
  5. 你不需要jQuery
  6. 【转】ubuntu 11.10(32位系统)下编译android源码
  7. ftp两种传输方式区别
  8. IDL计算儒略日
  9. bootstrap-modal.js 居中问题
  10. servlet第1讲初识
  11. [Swift-2019力扣杯春季决赛]1. 有序数组中的缺失元素
  12. Gradle 下载的依赖包在什么位置?
  13. failed to start process with commandline '%LAUNCHER_PATH% %LAUNCHER_ARGS%', ErrorCode = '0x80070002
  14. 运行supervisorctl reload报错解决方法
  15. 【题解】N皇后
  16. pycharm如何设置python版本、设置国内pip镜像、添加第三方类库
  17. RESTful规范(一)
  18. Spark1.0.0属性配置
  19. 据库被标记为RESTORING的处理方式,正在还原中,正在恢复
  20. TensorFlow入门(四) name / variable_scope 的使

热门文章

  1. 两个重叠的div做前后翻转
  2. mac下自己实现re-sign.jar对apk进行重签名
  3. MysqL之数值函数
  4. Mongo db 简单介绍及命令笔记
  5. c多线程不加锁demo
  6. 2018-2019 XIX Open Cup, Grand Prix of Korea B - Dev, Please Add This!
  7. C#readonly和const对比
  8. C# EPPlus 导出Excel
  9. 09—mybatis注解配置join查询
  10. Java并发包--线程池原理