在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是上一步设置中的数据库名称
如果安装完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目录下即可。
首先在数据库中创建一个Test库,在Test数据库中创建一张user表格,可以用上文中安装的MySQL Workbench创建,创建好后查询结果:
然后开始写demo程序,随便新建一个Qt Console或者Qt Widget程序,在pro文件中加上sql,如:
- QT += core gui sql
- ...
接着在程序中写上示例代码,记得修改mysql相关信息
- #include
- #include
- #include
- #include
-
- ...
- // 连接数据库
- 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;
- }
- ...
运行后即可打印数据库中的内容