Qt数据库总结
使用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
解决方法:
- 将Qt的数据库驱动复制到运行路径下(一般位于qt安装目录的 sqldrivers 文件夹下);
- 安装 mysql ,并将链接库库复制了运行路径下(libmysql.dll)
Qt数据库总结的更多相关文章
- qt数据库多线程问题的解决(QSqlDatabase只能在创建它的线程中使用)
Qt数据库由QSqlDatabase::addDatabase()生成的QSqlDatabase只能在创建它的线程中使用, 在多线程中共用连接或者在另外一个线程中创建query都是不支持的几乎国内没有 ...
- Qt添加驱动——Qt数据库之添加MySQL驱动插件
Qt数据库之添加MySQL驱动插件(1) 现在可用的数据库驱动只有3种,在Qt中,我们需要自己编译其他数据库驱动的代码,让它们以插件的形式来使用.下面我们就以现在比较流行的MySQL数据库为例,说明一 ...
- Qt数据库_资料
1. QT笔记_数据库总结(一)-rojian-ChinaUnix博客.html http://blog.chinaunix.net/uid-28194872-id-3631462.html (里面有 ...
- Qt数据库 QSqlTableModel实例操作(转)
本文介绍的是Qt数据库 QSqlTableModel实例操作,详细操作请先来看内容.与上篇内容衔接着,不顾本文也有关于上篇内容的链接. Qt数据库 QSqlTableModel实例操作是本文所介绍的内 ...
- C/C++ Qt 数据库与TreeView组件绑定
在上一篇博文<C/C++ Qt 数据库QSql增删改查组件应用>介绍了Qt中如何使用SQL操作函数,并实现了对数据库的增删改查等基本功能,从本篇开始将实现数据库与View组件的绑定,通过数 ...
- C/C++ Qt 数据库与TableView多组件联动
Qt 数据库组件与TableView组件实现联动,以下案例中实现了,当用户点击并选中TableView组件内的某一行时,我们通过该行中的name字段查询并将查询结果关联到ListView组件内,同时将 ...
- QT 数据库编程三
//mainwindow.cpp #include "mainwindow.h" #include "logindlg.h" #include "sc ...
- 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 ...
- 【转】Qt数据库总结
转自:http://blog.chinaunix.net/uid-25201977-id-3014100.html #include <QtSql>QT += sql QSqlDataba ...
- QT数据库使用案列【联系人】-- 使用sqlite和QStringListModel
[关于如何打包自己开发的程序为安装包,可以参考http://www.cnblogs.com/yuliyang/p/4242179.html] [简要功能介绍] 使用sqlite数据库和Qt搭建界面,实 ...
随机推荐
- Thinking in Java,Fourth Edition(Java 编程思想,第四版)学习笔记(四)之Operators
At the lowest level, data in Java is manipulated using operators Using Java Operators An operator ta ...
- matlab计算相对功率
1.对脑电数据进行db4四层分解,因为脑电频率是在0-64HZ,分层后如图所示, 细节分量[d1 d2 d3 d4] 近似分量[a4] 重建细节分量和近似分量,然后计算对应频段得相对功率谱,重建出来得 ...
- 如何使用python在短时间内寻找完数
完数:完全数(Perfect number),又称完美数或完备数,是一些特殊的自然数.它所有的真因子(即除了自身以外的约数)的和(即因子函数),恰好等于它本身.如果一个数恰好等于它的因子之和,则称该数 ...
- search(6)- elastic4s-CRUD
如果我们把ES作为某种数据库来使用的话,必须熟练掌握ES的CRUD操作.在这之前先更正一下上篇中关于检查索引是否存在的方法:elastic4s的具体调用如下: //删除索引 val rspExists ...
- @SessionAttributes 的使用
@SessionAttributes 注解只用作用在 类 上,作用是将指定的 Model 的键值对保存在 session 中.可以让其他请求共用 session 中的键值对. 指定保存的属性名 作用是 ...
- Git把本地代码推送到远程github仓库
运用Git版本控制系统进行代码的管理,以便于团队成员的协作,由于之前是使用svn来进行版本控制,所以对于Git使用还有待熟练掌握.Git与svn类似,个人认为两者之间比较直观的区别就是 Git 不需要 ...
- [YII2] 视图层过滤客户恶意代码
两种方式: 一种是吧html的恶意标签转译:(注意的就是命名空间) <?php use yii\helpers\Html; ?> <h1><?=Html::encode( ...
- s2h-HTTP Status 404 - No result defined for action and result input错误解决
今天做个小项目,用的是ssh,结果在运行的时候出现HTTP Status 404 - No result defined for action and result input的错误. 首先认真检查所 ...
- Ubuntu初次使用的问题
问题:正在等待packagekitd退出 解决办法:systemctl stop packagekit 或者 systemctl disable packagekit 问题:普通用户切换root权 ...
- Docker网络与存储(三)
Docker的网络和存储 1.1 Docker的4种网络模式 host模式,使用--net=host指定. container模式,使用--net=container:NAME_or_ID指定. no ...