找回密码
 立即注册
Qt开源社区 门户 查看内容

Qt数据库总结

2019-5-14 05:26| 发布者: admin| 查看: 1424| 评论: 0

摘要: 使用Qt SQL库头文件:#include QtSql项目:QT+=sql常用类QSqlDatabase:数据库的连接打开等操作QSqlQuery:执行语句,获取结果QSqlRecord:封装了数据库的所有记录示例//这里的123和456是为了区分两个数据库的连接QS ...

使用Qt SQL库


头文件:
 #include <QtSql>
项目:
 QT+=sql

常用类


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

QSqlQuery:执行语句,获取结果

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

示例

 //这里的123和456是为了区分两个数据库的连接
 QSqlDatabasedatabase_1=QSqlDatabase::addDatabase("QMYSQL", "111");
 database_1.setHostName("127.0.0.1");//主机地址
 database_1.setDatabaseName("test");//数据库名称
 database_1.setUserName("root");//登入数据库使用的用户名
 database_1.setPassword("ajdts");//密码

 QSqlDatabasedatabase_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);
 QSqlQueryquery(database_2);
 QSqlQueryquery(QSqlDatabase::database("222"));
 QStringsql_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())
 {
 intindex=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();

数据库类型和连接名

 QSqlDatabasedatabase_1=QSqlDatabase::addDatabase("QMYSQL", "111"); //根据连接名获取数据库
 QSqlDatabasedatabase_1=QSqlDatabase::database("123");

  • QMYSQL 表示使用 mysql,Qt支持的数据可以参开开发手册;

  • 可以同时连接并打开多个数据库,在新增数据库时传入连接名,可以区分,若不传入,Qt使用默认连接名;

  • 后面可以使用连接名获取数据库;

执行语句和获取结果

 QSqlQueryquery(database_2);
 query.exec(sql_statment);

  • 根据数据库获取query对象;

  • 使用 exec() 方法执行语句
 query.next();//获取结果集前需要使用 **next()** 方法; query.size();//结果的数量 intindex=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: QMYSQLdrivernotloaded
 QSqlDatabase: availabledrivers: QSQLITEQMYSQLQMYSQL3QODBCQODBC3QPSQLQPSQL7
原因:

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

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

解决方法:

  1. 将Qt的数据库驱动复制到运行路径下(一般位于qt安装目录的 sqldrivers 文件夹下);

  2. 安装 mysql ,并将链接库库复制了运行路径下(libmysql.dll)


----------------------------------------------------------------------------------------------------------------------
我们尊重原创,也注重分享,文章来源于微信公众号:Sherlock的程序人生,建议关注公众号查看原文。如若侵权请联系qter@qter.org。
----------------------------------------------------------------------------------------------------------------------

鲜花

握手

雷人

路过

鸡蛋

公告
可以关注我们的微信公众号yafeilinux_friends获取最新动态,或者加入QQ会员群进行交流:190741849、186601429(已满) 我知道了