在QT中使用MySQL数据库

前篇已经写了如何使用QT链接sqlite和SQLServer,见点击打开链接

本次主要说明如何通过QT链接MySQL数据库;

首先确保数据库中存在Mysql的驱动,详见QT安装目录中的plugins/sqldrivers文件夹下是否存在qsqlmysql.dll文件。


首先在xxx.pro工程文件中添加

QT       += sql

具体代码如下:

QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
 //   db.setDatabaseName("my.db");
    db.setHostName("128.110.110.110");
    db.setPort(3306);
    db.setDatabaseName("database");
    db.setUserName("root");
    db.setPassword("hello123");
    if (!db.open()) {
        QMessageBox::critical(0, "Cannot open database1",
                              "Unable to establish a database connection.", QMessageBox::Cancel);
        return false;
    }
如果可以正常打开和读取数据库,则说明链接成功。

注意:有时候存在即使有Mysql的驱动,仍然报错

QSqlDatabase: QMYSQL driver not loaded

QSqlDatabase: available drivers: QSQLITE QMYSQL QMYSQL3 QODBC QODBC3 QPSQL QPSQL7

此时说明QT中自带的Mysql的驱动不依赖,需要自己重新编译。方法如下:当然可以参考这里点击打开链接

先去官网下载https://dev.mysql.com/downloads/connector/c/

文件是mysql-connector-c-6.1.10-win32(当然选择适合自己操作系统的压缩包)

之后解压,在路径中不要存在中文和空格,然后进入QT的安装源码目录中找到mysql的源码,进行编译,

具体位于\Src\qtbase\src\plugins\sqldrivers\mysql该处,之后打开QT的命令行,如图:


然后执行:

cd C:\qt-everywhere-opensource-src-5.4.0\qtbase\src\plugins\sqldrivers\mysql\
qmake "INCLUDEPATH+=C:\MySQL\MySQLServer5.5\include" "LIBS+=C:\MySQL\MySQLServer5.5\lib\libmysql.lib" -o Makefile mysql.pro
mingw32-make
如果没有错误,则编译成功,可以在\Src\qtbase\plugins\sqldrivers该文件夹下发现已经生成动态链接库,将其拷贝之\mingw491_32\plugins\sqldrivers中替代之前QT自带的Mysql驱动。

然后将Mysql的动态链接库

C:\MySQL\MySQLServer5.5\lib\libmysql.lib
拷贝至系统中或者\mingw491_32\bin中即可。

大功告成。开始QT的Mysql之旅吧。

  • 14
    点赞
  • 58
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
要在QT使用TiDB数据库,你需要完成以下步骤: 1. 下载并安装MySQL Connector/C++(TiDB是兼容MySQL协议的)。 2. 在QT项目包含MySQL Connector/C++的头文件。 3. 使用MySQL Connector/C++提供的API连接到TiDB数据库。 4. 执行SQL语句来操作TiDB数据库。 下面是一个简单的示例代码,它连接到TiDB数据库并查询一个表: ```cpp #include <QCoreApplication> #include <iostream> #include <mysql_connection.h> #include <mysql_driver.h> #include <cppconn/exception.h> #include <cppconn/resultset.h> #include <cppconn/statement.h> int main(int argc, char *argv[]) { QCoreApplication a(argc, argv); try { // 创建一个MySQL连接 sql::mysql::MySQL_Driver *driver; sql::Connection *con; driver = sql::mysql::get_mysql_driver_instance(); con = driver->connect("tcp://localhost:4000", "root", "password"); // 设置数据库编码 con->setSchema("mydatabase"); con->setClientOption("characterSetResults", "utf8"); // 执行SQL语句 sql::Statement *stmt; sql::ResultSet *res; stmt = con->createStatement(); res = stmt->executeQuery("SELECT * FROM mytable"); // 处理查询结果 while (res->next()) { std::cout << res->getInt("id") << ", "; std::cout << res->getString("name") << std::endl; } // 释放资源 delete res; delete stmt; delete con; } catch (sql::SQLException &e) { std::cout << "# ERR: SQLException in " << __FILE__; std::cout << "(" << __FUNCTION__ << ") on line " << __LINE__ << std::endl; std::cout << "# ERR: " << e.what(); std::cout << " (MySQL error code: " << e.getErrorCode(); std::cout << ", SQLState: " << e.getSQLState() << " )" << std::endl; } return a.exec(); } ``` 注意,TiDB使用MySQL协议,但是与传统MySQL的一些特性有所不同,例如,TiDB是分布式的、支持事务的数据库,因此你需要根据TiDB的文档来正确地使用它。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值