使用Qt SQL库

头文件:

#include <QtSql>

项目:

QT += sql

常用类

QSqlDatabase:数据库的连接打开等操作

QSqlQuery:执行语句,获取结果

QSqlRecord:封装了数据库的所有记录

示例

//这里的123和456是为了区分两个数据库的连接
QSqlDatabase database_1 = QSqlDatabase::addDatabase("QMYSQL", "111");
database_1.setHostName("127.0.0.1");//主机地址
database_1.setDatabaseName("test"); //数据库名称
database_1.setUserName("root"); //登入数据库使用的用户名
database_1.setPassword("ajdts"); //密码 QSqlDatabase database_2 = QSqlDatabase::addDatabase("QMYSQL", "222");
database_2.setHostName("127.0.0.1");
database_2.setDatabaseName("test_2");
database_2.setUserName("root");
database_2.setPassword("ajdts"); database_1.open()//打开数据库
database_2.open() //QSqlQuery query(database_1);
QSqlQuery query(database_2);
QSqlQuery query(QSqlDatabase::database("222"));
QString sql_statment = QString("select name from table_1 where id=1;");
if(!query.exec(sql_statment))
{
qDebug()<<"exec fail"<<query.lastError().text();
return;
}
qDebug()<<"Size:"<<query.size();
while(query.next())
{
int index = query.record().indexOf("name");
qDebug()<<query.value(index).toString();
}
//插入数据
sql_statment = QString("insert into table_1 (`name`, `price`) value (?, ?);");
query.prepare(sql_statment) query.addBindValue("abc");
query.addBindValue(123.45);
query.exec() database_1.close(); //关闭数据库
database_2.close();

数据库类型和连接名

QSqlDatabase database_1 = QSqlDatabase::addDatabase("QMYSQL", "111");
//根据连接名获取数据库
QSqlDatabase database_1 = QSqlDatabase::database("123");
  • QMYSQL 表示使用 mysql,Qt支持的数据可以参开开发手册;
  • 可以同时连接并打开多个数据库,在新增数据库时传入连接名,可以区分,若不传入,Qt使用默认连接名;
  • 后面可以使用连接名获取数据库;

执行语句和获取结果

QSqlQuery query(database_2);
query.exec(sql_statment);
  • 根据数据库获取query对象;
  • 使用 exec() 方法执行语句
query.next();//获取结果集前需要使用 **next()** 方法;
query.size();//结果的数量
int index = query.record().indexOf("name");	//获取名称在结果中的下标
qDebug()<<query.value(index).toString(); //根据下表获取结果
qDebug()<<query.value("name").toString(); //根据名称获取结果

插入数据

sql_statment = QString("insert into table_1 (`name`, `price`) value (?, ?);");
query.prepare(sql_statment) query.addBindValue("abc");
query.addBindValue(123.45);
query.exec()
  • 插入数据可以直接拼接sql语句,也可以使用上面占位符的方法;

常见错误

QSqlDatabase: QMYSQL driver not loaded
QSqlDatabase: available drivers: QSQLITE QMYSQL QMYSQL3 QODBC QODBC3 QPSQL QPSQL7

原因:

​ 缺少数据库驱动,若是使用 sqlite 则不需要额外驱动,qt自带;若是其他数据库,还需要安装对应的数据库。

​ 如 mysql,除了qt的 mysql 驱动外,还需要安装 mysql

解决方法:

  1. 将Qt的数据库驱动复制到运行路径下(一般位于qt安装目录的 sqldrivers 文件夹下);
  2. 安装 mysql ,并将链接库库复制了运行路径下(libmysql.dll

Qt数据库总结的更多相关文章

  1. qt数据库多线程问题的解决(QSqlDatabase只能在创建它的线程中使用)

    Qt数据库由QSqlDatabase::addDatabase()生成的QSqlDatabase只能在创建它的线程中使用, 在多线程中共用连接或者在另外一个线程中创建query都是不支持的几乎国内没有 ...

  2. Qt添加驱动——Qt数据库之添加MySQL驱动插件

    Qt数据库之添加MySQL驱动插件(1) 现在可用的数据库驱动只有3种,在Qt中,我们需要自己编译其他数据库驱动的代码,让它们以插件的形式来使用.下面我们就以现在比较流行的MySQL数据库为例,说明一 ...

  3. Qt数据库_资料

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

  4. Qt数据库 QSqlTableModel实例操作(转)

    本文介绍的是Qt数据库 QSqlTableModel实例操作,详细操作请先来看内容.与上篇内容衔接着,不顾本文也有关于上篇内容的链接. Qt数据库 QSqlTableModel实例操作是本文所介绍的内 ...

  5. C/C++ Qt 数据库与TreeView组件绑定

    在上一篇博文<C/C++ Qt 数据库QSql增删改查组件应用>介绍了Qt中如何使用SQL操作函数,并实现了对数据库的增删改查等基本功能,从本篇开始将实现数据库与View组件的绑定,通过数 ...

  6. C/C++ Qt 数据库与TableView多组件联动

    Qt 数据库组件与TableView组件实现联动,以下案例中实现了,当用户点击并选中TableView组件内的某一行时,我们通过该行中的name字段查询并将查询结果关联到ListView组件内,同时将 ...

  7. QT 数据库编程三

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

  8. Qt数据库操作(qt-win-commercial-src-4.3.1,VC6,Oracle,SQL Server)

    qt-win-commercial-src-4.3.1.qt-x11-commercial-src-4.3.1Microsoft Visual C++ 6.0.KDevelop 3.5.0Window ...

  9. 【转】Qt数据库总结

    转自:http://blog.chinaunix.net/uid-25201977-id-3014100.html #include <QtSql>QT += sql QSqlDataba ...

  10. QT数据库使用案列【联系人】-- 使用sqlite和QStringListModel

    [关于如何打包自己开发的程序为安装包,可以参考http://www.cnblogs.com/yuliyang/p/4242179.html] [简要功能介绍] 使用sqlite数据库和Qt搭建界面,实 ...

随机推荐

  1. python实现双向链表的操作

    双向链表 双向链表又叫做双链表,每个节点有两个指针域和一个数据域.prev指针域指向前一个节点,next指针域指向下一个节点.注意,第一个节点的prev指针域指向空值,最后一个节点的next域也是指向 ...

  2. Feature list, Standard and Test plan for BETA Release 12/22/2015

    ===================BETA RELEASE FEATRURE LIST==================== 1. Log in and account manager for ...

  3. stand up meeting 11/20/2015

    3组员 今日工作 工作耗时/h 明日计划 计划耗时/h 冯晓云 将输出string里的翻译合理取分为动名词等各种词性,按约定格式返回,按热度排列,但每一个词性下的解释仍然是由“$$”分词:对于查询词为 ...

  4. asp.net core webapi Session 内存缓存

    Startup.cs文件中的ConfigureServices方法配置: #region Session内存缓存 services.Configure<CookiePolicyOptions&g ...

  5. 详解 final 和 static

    在我们上一篇博文中提到了 fianl 这个关键字,对于这个关键字,本人在初学时也耗费了极大地心血,甚至和师兄进行了激烈的讨论,并且,在我们讨论.尝试 以及 翻阅各种资料,最终得出了合适.易懂的解释. ...

  6. CSS 中的伪类和伪元素

    伪类(Pseudo classes) 由于状态的变化是非静态的,所以元素达到一个特定状态时,它可能得到一个伪类的样式:当状态改变时,它又会失去这个样式.由此可以看出,它的功能和 class 有些类似, ...

  7. BUUOJ [WUSTCTF2020]朴实无华

    [WUSTCTF2020]朴实无华 复现了武科大的一道题/// 进入界面 一个hack me 好吧,直接看看有没有robot.txt 哦豁,还真有 好吧 fAke_f1agggg.php 看了里面,然 ...

  8. 小程序里json字符串转json对象需注意的地方

    一.JSON字符串转换为JSON对象 要使用上面的str1,必须使用下面的方法先转化为JSON对象: //由JSON字符串转换为JSON对象 var obj = eval('(' + str + ') ...

  9. Inno Setup打包之先卸载再安装

    使用Inno Setup打包程序之后,如果想要在安装前先卸载,那么需要加下面代码,需要注意的是红色标注的改为你们自己的.网上看到有些说_is1前面用AppName,但是我这边验证不行. [Setup] ...

  10. LightOJ 1287 Where to Run(期望)

    题目链接:http://www.lightoj.com/volume_showproblem.php?problem=1287 题意:给定一个n个点的无向图(0到n-1),你开始在0.你开始遍历这个图 ...