• 在Qt中使用MySQL


    1. 安装MySQL

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

    1. sudo apt install mysql-server # mysql核心服务
    2. 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用户,但是最好再新建个其它用户。

    1. # 进入mysql命令行
    2. mysql -u root -p
    3. # 修改校验密码策略等级为低
    4. set global validate_password.policy=LOW;
    5. # 设置密码长度至少为4
    6. set global validate_password.length=4;
    7. # 创建名为test的用户
    8. CREATE USER 'test'@'localhost' IDENTIFIED BY 'test';
    9. # 为test用户授予所有权限(格式:grant 权限 on 数据库.数据表 to '用户' @ '主机名';)
    10. grant all on *.* to 'test'@'%';
    11. # 其它
    12. 修改用户密码:ALTER USER 'root'@'localhost' IDENTIFIED BY '1234';

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

    1. sudo apt install unixodbc
    2. sudo apt install unixodbc-dev
    3. sudo apt install mysql-connector-odbc
    4. odbcinst -j # 查看odbc配置信息

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

    1. [Test] # 修改为自己创建的数据库名称
    2. Description = Data source MySQL
    3. Driver = MySQL ODBC 8.0 Unicode Driver
    4. Server = localhost
    5. Host = localhost
    6. Database = Test # 修改为自己创建的数据库名称
    7. Port = 3306
    8. User = test # 修改为自己mysql的用户名称
    9. 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中这样写:

    1. ...
    2. QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
    3. db.setHostName("127.0.0.1");
    4. db.setPort(3306);
    5. ...

    会报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文件:

    1. TARGET = qsqlmysql
    2. HEADERS += $$PWD/qsql_mysql_p.h
    3. SOURCES += $$PWD/qsql_mysql.cpp $$PWD/main.cpp
    4. #QMAKE_USE += mysql # 屏蔽此行
    5. OTHER_FILES += mysql.json
    6. INCLUDEPATH += /usr/include/mysql # 加上此行
    7. unix:LIBS += -L/usr/lib/x86_64-linux-gnu/ -lmysqlclient # 加上此行
    8. PLUGIN_CLASS_NAME = QMYSQLDriverPlugin
    9. include(../qsqldriverbase.pri)

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

    1. QT = core core-private sql-private
    2. For QMAKE_USE in the parent projects.
    3. #include($$shadowed($$PWD)/qtsqldrivers-config.pri) # 注释此行
    4. PLUGIN_TYPE = sqldrivers
    5. load(qt_plugin)
    6. DEFINES += QT_NO_CAST_TO_ASCII QT_NO_CAST_FROM_ASCII

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

    1. sudo /opt/Qt/5.15.2/gcc_64/bin/qmake
    2. sudo make -j4
    3. 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,如:

    1. QT += core gui sql
    2. ...

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

    1. #include
    2. #include
    3. #include
    4. #include
    5. ...
    6. // 连接数据库
    7. QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
    8. db.setHostName("127.0.0.1"); // localhost
    9. db.setPort(3306); // mysql默认端口号
    10. db.setDatabaseName("Test"); // 需要连接的数据库名
    11. db.setUserName("root"); // mysql用户名
    12. db.setPassword("wangjuns123"); // mysql密码
    13. bool ok = db.open();
    14. if(ok) QMessageBox::information(this, "information", "link success!");
    15. else
    16. {
    17. QMessageBox::critical(this, "error", "link failed!");
    18. qDebug() << "error open database: " << db.lastError().text();
    19. return;
    20. }
    21. // 读取数据库中刚才创建的数据
    22. QSqlQuery query("SELECT * FROM Test.user");
    23. while(query.next())
    24. {
    25. qDebug() << query.value("id").toString();
    26. qDebug() << query.value("username").toString();
    27. qDebug() << query.value("email").toString() << endl;
    28. }
    29. ...

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

  • 相关阅读:
    常用linux命令
    音视频项目—基于FFmpeg和SDL的音视频播放器解析(十八)
    数据分析工具Polars实现CSV读写、排序、应用函数、lazy API
    使用Python进行钻石价格分析
    VSCode编译运行C代码
    设计模式 - 解释器模式
    Linux操作系统常见指令理解(2)
    FLowUs:一款优秀强大、好看的文件协作软件
    spark完全分布式部署
    scp 出现Permission denied错误 解决方法
  • 原文地址:https://blog.csdn.net/qq_37996632/article/details/126612599