在Qt中使用MySQL

1. 安装MySQL

在Ubuntu下可通过以下命令安装MySQL

sudo apt install mysql-server    # mysql核心服务
sudo apt install mysql-client    # mysql客户端工具

可以通过以下命令查看MySQL运行状态,正常运行会显示绿色的active (running)

sudo systemctl status mysql

最好安装一个MySQL图形化查看工具,方便查看数据库,如MySQL Workbench(收费的Navicat更好用),可以用Ubuntu的snap直接安装:

snap install mysql-workbench-community

为MySQL创建test用户。MySQL默认有root用户,但是最好再新建个其它用户。

# 进入mysql命令行
mysql -u root -p

# 修改校验密码策略等级为低
set global validate_password.policy=LOW;

# 设置密码长度至少为4
set global validate_password.length=4;

# 创建名为test的用户
CREATE USER 'test'@'localhost' IDENTIFIED BY 'test';

# 为test用户授予所有权限(格式:grant 权限 on 数据库.数据表 to '用户' @ '主机名';)
grant all on *.* to 'test'@'%';


# 其它
修改用户密码:ALTER USER 'root'@'localhost' IDENTIFIED BY '1234';

如果有需要用到ODBC,也可以装个MySQL的ODBC驱动,在Ubuntu下直接运行下面的命令即可

sudo apt install unixodbc
sudo apt install unixodbc-dev
sudo apt install mysql-connector-odbc

odbcinst -j                             # 查看odbc配置信息

接着修改odbc的数据源,sudo vim /etc/odbc.ini

[Test]                                                # 修改为自己创建的数据库名称
Description     = Data source MySQL
Driver          = MySQL ODBC 8.0 Unicode Driver
Server          = localhost
Host            = localhost
Database        = Test                                # 修改为自己创建的数据库名称
Port            = 3306                                
User            = test                                # 修改为自己mysql的用户名称
Password        = test                                # 修改为自己mysql的用户密码

最后用命令检查下是否出现mysql后台,出现了表示设置成功,如果设置错误会报[IM002][unixODBC][Driver Manager]Data source name not found, and no default driver specified [ISQL]ERROR: Could not SQLConnect

isql -v Test        # Test是上一步设置中的数据库名称

2. 安装Qt的MySQL驱动

如果安装完MySQL后直接在Qt中这样写:

...
QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
db.setHostName("127.0.0.1");
db.setPort(3306);
...

会报QSqlDatabase: QMYSQL driver not loaded,QSqlDatabase: available drivers: QSQLITE QODBC QODBC3 QPSQL QPSQL的错误,所以需要手动安装一下MySQL的Qt驱动。

首先安装libmysqlclient-dev,如果不安装的话后面编译时会缺少mysql.h等相关文件,安装后这个文件会在/usr/include/mysql/

sudo apt install libmysqlclient-dev

然后cd到Qt安装目录的sqldriver目录下,如/opt/Qt/5.15.2/Src/qtbase/src/plugins/sqldrivers/mysql,具体因Qt安装目录而异,接着编辑该目录下的mysql.pro文件:

TARGET = qsqlmysql

HEADERS += $$PWD/qsql_mysql_p.h
SOURCES += $$PWD/qsql_mysql.cpp $$PWD/main.cpp

#QMAKE_USE += mysql                                        # 屏蔽此行

OTHER_FILES += mysql.json
INCLUDEPATH += /usr/include/mysql                          # 加上此行
unix:LIBS   += -L/usr/lib/x86_64-linux-gnu/ -lmysqlclient  # 加上此行
PLUGIN_CLASS_NAME = QMYSQLDriverPlugin
include(../qsqldriverbase.pri)

以及上一层目录的qsqldriverbase.pri文件,vim ../qsqldriverbase.pri,修改如下:

QT  = core core-private sql-private                                                                                                                                                                   

For QMAKE_USE in the parent projects.
#include($$shadowed($$PWD)/qtsqldrivers-config.pri) 	# 注释此行
PLUGIN_TYPE = sqldrivers
load(qt_plugin)
DEFINES += QT_NO_CAST_TO_ASCII QT_NO_CAST_FROM_ASCII

修改好之后便可以编译了,注意qmake需要指定Qt安装目录下的qmake

sudo /opt/Qt/5.15.2/gcc_64/bin/qmake 
sudo make -j4
sudo make install

编译完成后,libqsqlmysql.so便会生成在/opt/Qt/5.15.2/Src/qtbase/src/plugins/sqldrivers/plugins/sqldrivers/下,cd到此目录下并拷贝到/opt/Qt/5.15.2/gcc_64/plugins/sqldrivers目录下即可。

3. demo示例

首先在数据库中创建一个Test库,在Test数据库中创建一张user表格,可以用上文中安装的MySQL Workbench创建,创建好后查询结果:

然后开始写demo程序,随便新建一个Qt Console或者Qt Widget程序,在pro文件中加上sql,如:

QT       += core gui sql
...

接着在程序中写上示例代码,记得修改mysql相关信息

#include <QMessageBox>
#include <QSqlError>
#include <QSqlDatabase>
#include <QDebug>

...
// 连接数据库
QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
db.setHostName("127.0.0.1");        // localhost
db.setPort(3306);                   // mysql默认端口号
db.setDatabaseName("Test");          // 需要连接的数据库名
db.setUserName("root");             // mysql用户名
db.setPassword("wangjuns123");      // mysql密码
bool ok = db.open();
if(ok) QMessageBox::information(this, "information", "link success!");
else
{
	QMessageBox::critical(this, "error", "link failed!");
	qDebug() << "error open database: " << db.lastError().text();
    return;
}

// 读取数据库中刚才创建的数据
QSqlQuery query("SELECT * FROM Test.user");
while(query.next())
{
	qDebug() << query.value("id").toString();
	qDebug() << query.value("username").toString();
	qDebug() << query.value("email").toString() << endl;
}
...

运行后即可打印数据库中的内容

  • 1
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值