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;
}
...
运行后即可打印数据库中的内容