Ubuntu下QT操作Mysql数据库

这篇具有很好参考价值的文章主要介绍了Ubuntu下QT操作Mysql数据库。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

本篇总结一下一下Ubuntu下QT操作Mysql数据库。

目录

1. 启动Mysql数据库服务器

2.查看QT支持的数据库驱动

3.连接数据库

4. 增加表和记录

5. 删除记录

6. 修改记录

7. 查询记录

8.完整代码和运行效果

常见错误总结:

(1) 数据库服务没启动报错信息

(2) 有QMYSQL驱动,连接数据缺失败


1. 启动Mysql数据库服务器

// 启动

sudo /etc/init.d/mysql start

// 重启

sudo /etc/init.d/mysql restart

// 关闭

sudo /etc/init.d/mysql stop

Ubuntu下QT操作Mysql数据库,QT,mysql,qt,mysql

Ubuntu下QT操作Mysql数据库,QT,mysql,qt,mysql

2.查看QT支持的数据库驱动

Qt SQL模块是Qt提供的一个访问数据库的接口,支持多种平台下使用不同类型的数据库,在这个过程中,数据库驱动起到了很大的作用,它负责与不同的数据库进行通信,有了数据库驱动,我们才能使用不同类型的数据库。

#include <QtSql/QSqlDatabase>

// 查看支持的数据库驱动
qDebug() << QSqlDatabase::drivers();

3.连接数据库

QSqlDatabase db;
if(QSqlDatabase::contains("qt_sql_default_connection")) {
	db = QSqlDatabase::database("qt_sql_default_connection");
}
else {
	// 创建一个数据库连接,指定数据库驱动
	db = QSqlDatabase::addDatabase("QMYSQL");
}

// 数据库连接需要设置的信息
db.setHostName("127.0.0.1"); // 数据库服务器IP,我用的是本地电脑
db.setDatabaseName("TestDB");// 数据库名
db.setUserName("root");// 用户名
db.setPassword("mysql");// 密码
db.setPort(3306);// 端口号

// 连接数据库
bool ok = db.open();

if (ok) {
	qDebug() << "连接成功";
}
else {
	qDebug() << "连接失败";
}

4. 增加表和记录

// 实例化QSqlQuery,用于执行sql语句
QSqlQuery query(m_db);
// 创建一个表
query.exec("create table newUser (id int primary key, username varchar(20))");
QSqlQuery query(m_db);
query.exec("INSERT INTO newUser (id, username) VALUES (1, 'Hello')");

int userid = 2;
QString &&name = "张三";
query.prepare("INSERT INTO newUser (id, username) VALUES (:id, :username)");
query.bindValue(":id", userid);
query.bindValue(":username", name);
query.exec();

query.exec("INSERT INTO newUser (id, username) VALUES (3, 'Andy')");
query.exec("INSERT INTO newUser (id, username) VALUES (4, '李四')");

5. 删除记录

QSqlQuery query(m_db);
query.prepare("DELETE FROM newUser WHERE username=:username");
query.bindValue(":username", "张三");
query.exec();

6. 修改记录

QSqlQuery query(m_db);
query.prepare("update newUser set username=:username WHERE id=:id");
query.bindValue(":id", 1);
query.bindValue(":username", "World");
query.exec();

7. 查询记录

  // 查询所有
  QString sql = "SELECT id, username FROM newUser" ; // 组装sql语句
    QSqlQuery query(m_db);                               // [1] 传入数据库连接
    query.exec(sql);                                   // [2] 执行sql语句
    while (query.next()) {                             // [3] 遍历查询结果
        qDebug() << QString("Id: %1, Username: %2")
                    .arg(query.value("id").toInt())
                    .arg(query.value("username").toString());
    }

    // 查询指定记录
    QString username = "李四";
    sql = "SELECT * FROM newUser WHERE username='" + username + "'";
    query.exec(sql);        // [2] 执行sql语句
    while (query.next()) {  // [3] 遍历查询结果
        qDebug() << QString("Id: %1, Username: %2")
                    .arg(query.value("id").toInt())
                    .arg(query.value("username").toString());

    }

    // 绑定数据查询
    username = "张三";
    sql = "SELECT * FROM newUser WHERE username=:username";
    query.prepare(sql);                     // [2] 使用名称绑定的方式解析 SQL 语句
    query.bindValue(":username", username); // [3] 把占位符替换为传入的参数
    query.exec();                           // [4] 执行数据库操作
    while (query.next()) {                  // [5] 遍历查询结果
        qDebug() << QString("Id: %1, Username: %2")
                    .arg(query.value("id").toInt())
                    .arg(query.value("username").toString());

    }

8.完整代码和运行效果

qt_mysql.pro

#-------------------------------------------------
#
# Project created by QtCreator 2023-09-05T23:12:20
#
#-------------------------------------------------

QT       += core gui
QT += sql

greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

TARGET = qt_mysql
TEMPLATE = app

# The following define makes your compiler emit warnings if you use
# any feature of Qt which as been marked as deprecated (the exact warnings
# depend on your compiler). Please consult the documentation of the
# deprecated API in order to know how to port your code away from it.
DEFINES += QT_DEPRECATED_WARNINGS

# You can also make your code fail to compile if you use deprecated APIs.
# In order to do so, uncomment the following line.
# You can also select to disable deprecated APIs only up to a certain version of Qt.
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000    # disables all the APIs deprecated before Qt 6.0.0


SOURCES += \
        main.cpp \
        mainwindow.cpp

HEADERS += \
        mainwindow.h

FORMS += \
        mainwindow.ui

mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QtSql/QSqlDatabase>
#include <QDebug>

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();

private slots:
    void on_pushButton_clicked();

    void on_pushButton_2_clicked();

    void on_pushButton_3_clicked();

    void on_pushButton_4_clicked();

    void on_pushButton_5_clicked();

    void on_pushButton_6_clicked();

    void on_pushButton_7_clicked();

    void on_pushButton_clear_table_clicked();

private:
    void createConnectionByName(const QString &connectionName); //使用自定义 connectionName 创建连接
    QSqlDatabase getConnectionByName(const QString &connectionName);  // 使用自定义 connectionName 获取连接

private:
    Ui::MainWindow *ui;
    QSqlDatabase m_db;
};

#endif // MAINWINDOW_H

mainwindow.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QSqlQuery>

/*
Qt SQL模块是Qt提供的一个访问数据库的接口,支持多种平台下使用不同类型的数据库,在这个过程中,
数据库驱动起到了很大的作用,它负责与不同的数据库进行通信,有了数据库驱动,我们才能使用不同类型的数据库。

*/

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    // 创建名为 firstMysqlConnect 的数据库连接
    createConnectionByName("firstMysqlConnect");
}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::on_pushButton_clicked()
{
    // 查看支持的数据库驱动
    qDebug() << QSqlDatabase::drivers();
}

//使用自定义 connectionName 创建连接
void MainWindow::createConnectionByName(const QString &connectionName){

    m_db = QSqlDatabase::addDatabase("QMYSQL", connectionName);
    // 数据库连接需要设置的信息
    m_db.setHostName("127.0.0.1"); // 数据库服务器IP,我用的是本地电脑
    m_db.setDatabaseName("TestDB");// 数据库名
    m_db.setUserName("root");// 用户名
    m_db.setPassword("mysql");// 密码
    m_db.setPort(3306);// 端口号

    // 连接数据库判断
    bool ok = m_db.open();

    if (ok){
        qDebug() << "连接成功";
    } else {
        qDebug() << "连接失败";
    }

}

// 使用自定义 connectionName 获取连接
QSqlDatabase MainWindow::getConnectionByName(const QString &connectionName) {
    // 获取数据库连接
    return QSqlDatabase::database(connectionName);
}

void MainWindow::on_pushButton_2_clicked()
{
    QSqlDatabase db;
    if(QSqlDatabase::contains("qt_sql_default_connection")) {
        db = QSqlDatabase::database("qt_sql_default_connection");
    }
    else {
        // 创建一个数据库连接,指定数据库驱动
        db = QSqlDatabase::addDatabase("QMYSQL");
    }

    // 数据库连接需要设置的信息
    db.setHostName("127.0.0.1"); // 数据库服务器IP,我用的是本地电脑
    db.setDatabaseName("TestDB");// 数据库名
    db.setUserName("root");// 用户名
    db.setPassword("mysql");// 密码
    db.setPort(3306);// 端口号

    // 连接数据库
    bool ok = db.open();

    if (ok) {
        qDebug() << "连接成功";
    }
    else {
        qDebug() << "连接失败";
    }
}

void MainWindow::on_pushButton_3_clicked()
{
    // 实例化QSqlQuery,用于执行sql语句
    QSqlQuery query(m_db);
    // 创建一个表
    query.exec("create table newUser (id int primary key, username varchar(20))");
}

void MainWindow::on_pushButton_4_clicked()
{
    QSqlQuery query(m_db);
    query.exec("INSERT INTO newUser (id, username) VALUES (1, 'Hello')");

    int userid = 2;
    QString &&name = "张三";
    query.prepare("INSERT INTO newUser (id, username) VALUES (:id, :username)");
    query.bindValue(":id", userid);
    query.bindValue(":username", name);
    query.exec();

    query.exec("INSERT INTO newUser (id, username) VALUES (3, 'Andy')");
    query.exec("INSERT INTO newUser (id, username) VALUES (4, '李四')");
}

void MainWindow::on_pushButton_5_clicked()
{
    QSqlQuery query(m_db);
    query.prepare("DELETE FROM newUser WHERE username=:username");
    query.bindValue(":username", "张三");
    query.exec();
}

void MainWindow::on_pushButton_6_clicked()
{
    QSqlQuery query(m_db);
    query.prepare("update newUser set username=:username WHERE id=:id");
    query.bindValue(":id", 1);
    query.bindValue(":username", "World");
    query.exec();
}

void MainWindow::on_pushButton_7_clicked()
{
    // 查询所有
    QString sql = "SELECT id, username FROM newUser" ; // 组装sql语句
    QSqlQuery query(m_db);                               // [1] 传入数据库连接
    query.exec(sql);                                   // [2] 执行sql语句
    while (query.next()) {                             // [3] 遍历查询结果
        qDebug() << QString("Id: %1, Username: %2")
                    .arg(query.value("id").toInt())
                    .arg(query.value("username").toString());
    }

    // 查询指定记录
    QString username = "李四";
    sql = "SELECT * FROM newUser WHERE username='" + username + "'";
    query.exec(sql);        // [2] 执行sql语句
    while (query.next()) {  // [3] 遍历查询结果
        qDebug() << QString("Id: %1, Username: %2")
                    .arg(query.value("id").toInt())
                    .arg(query.value("username").toString());

    }

    // 绑定数据查询
    username = "张三";
    sql = "SELECT * FROM newUser WHERE username=:username";
    query.prepare(sql);                     // [2] 使用名称绑定的方式解析 SQL 语句
    query.bindValue(":username", username); // [3] 把占位符替换为传入的参数
    query.exec();                           // [4] 执行数据库操作
    while (query.next()) {                  // [5] 遍历查询结果
        qDebug() << QString("Id: %1, Username: %2")
                    .arg(query.value("id").toInt())
                    .arg(query.value("username").toString());

    }
}

void MainWindow::on_pushButton_clear_table_clicked()
{
    QSqlQuery query(m_db);
    query.exec("DELETE FROM newUser");
}

main.cpp

#include "mainwindow.h"
#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    w.show();

    return a.exec();
}

mainwindow.ui

<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
 <class>MainWindow</class>
 <widget class="QMainWindow" name="MainWindow">
  <property name="geometry">
   <rect>
    <x>0</x>
    <y>0</y>
    <width>693</width>
    <height>412</height>
   </rect>
  </property>
  <property name="windowTitle">
   <string>MainWindow</string>
  </property>
  <widget class="QWidget" name="centralWidget">
   <layout class="QGridLayout" name="gridLayout">
    <item row="0" column="0">
     <widget class="QPushButton" name="pushButton">
      <property name="text">
       <string>查看数据库驱动</string>
      </property>
     </widget>
    </item>
    <item row="0" column="1">
     <widget class="QPushButton" name="pushButton_2">
      <property name="text">
       <string>连接mysql数据库</string>
      </property>
     </widget>
    </item>
    <item row="1" column="0">
     <widget class="QPushButton" name="pushButton_3">
      <property name="text">
       <string>创建表</string>
      </property>
     </widget>
    </item>
    <item row="1" column="1">
     <widget class="QPushButton" name="pushButton_4">
      <property name="text">
       <string>插入记录</string>
      </property>
     </widget>
    </item>
    <item row="2" column="0">
     <widget class="QPushButton" name="pushButton_5">
      <property name="text">
       <string>删除记录</string>
      </property>
     </widget>
    </item>
    <item row="2" column="1">
     <widget class="QPushButton" name="pushButton_6">
      <property name="text">
       <string>修改记录</string>
      </property>
     </widget>
    </item>
    <item row="3" column="0">
     <widget class="QPushButton" name="pushButton_7">
      <property name="text">
       <string>查询记录</string>
      </property>
     </widget>
    </item>
    <item row="3" column="1">
     <widget class="QPushButton" name="pushButton_clear_table">
      <property name="text">
       <string>删除表中所有数据</string>
      </property>
     </widget>
    </item>
   </layout>
  </widget>
  <widget class="QMenuBar" name="menuBar">
   <property name="geometry">
    <rect>
     <x>0</x>
     <y>0</y>
     <width>693</width>
     <height>39</height>
    </rect>
   </property>
  </widget>
  <widget class="QToolBar" name="mainToolBar">
   <attribute name="toolBarArea">
    <enum>TopToolBarArea</enum>
   </attribute>
   <attribute name="toolBarBreak">
    <bool>false</bool>
   </attribute>
  </widget>
  <widget class="QStatusBar" name="statusBar"/>
 </widget>
 <layoutdefault spacing="6" margin="11"/>
 <resources/>
 <connections/>
</ui>

Ubuntu下QT操作Mysql数据库,QT,mysql,qt,mysql

Ubuntu下QT操作Mysql数据库,QT,mysql,qt,mysql

常见错误总结:

(1) 数据库服务没启动报错信息

Ubuntu下QT操作Mysql数据库,QT,mysql,qt,mysql

Ubuntu下QT操作Mysql数据库,QT,mysql,qt,mysql

(2) 有QMYSQL驱动,连接数据缺失败

Ubuntu下QT操作Mysql数据库,QT,mysql,qt,mysql

原因:Qt对Mysql进行了封装,库名为libqsqlmysql.so,但是其还需要调用Mysql的客户端库才能真正连接数据库,如下可以看到libqsqlmysql.so需要依赖libmysqlclient.so.18。

Ubuntu下QT操作Mysql数据库,QT,mysql,qt,mysqlUbuntu下QT操作Mysql数据库,QT,mysql,qt,mysql文章来源地址https://www.toymoban.com/news/detail-709222.html

到了这里,关于Ubuntu下QT操作Mysql数据库的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • QT连接Mysql数据库(详细成功版)

    QT连接Mysql数据库步骤相对比较麻烦,因此写了篇文章将详细过程呈现给大家,欢迎大家来评论区指导提问。 示例代码: (1)在.pro文件中添加下列代码: (2)在mainwindow.h文件中添加下列头文件:  (3)在main.cpp文件中添加下列代码: 运行代码,如果连接Mysql成功则输出下面

    2024年01月16日
    浏览(56)
  • QT mysql 驱动-数据库安装以及qt连接ssl报错问题

    文章末尾是引用笔记 配置MySQL8.0 环境变量 如果不配置MySQL环境变量,就不能在命令行直接输入MySQL登录命令。下面说如何配置MySQL的环境变量: 步骤1:在桌面上右击【此电脑】图标,在弹出的快捷菜单中选择【属性】菜单命令。 步骤2:打开【系统】窗口,单击【高级系统设

    2024年01月20日
    浏览(56)
  • Qt连接MySQL数据库最详细的教程

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 原文链接:https://blog.csdn.net/joey_ro/article/details/105411135 被Qt连接数据库折磨了三天之后终于连接成功了,记录一下希望对看到的人有所帮助。 当然要在.pro文件中添加一行引入 如果显示: 那么恭喜你太幸

    2024年01月21日
    浏览(49)
  • Qt连接MySQL数据库(保姆级成功版教程)

    VIP通道可以关注我,私信我,直接给两个动态库,直接起飞。 1、安装Qt时勾选sources 2、配置path环境变量 ① 此电脑-属性-高级系统设置-环境变量 ② 双击path-右上角新建 ③把这两个路径添加进去,最后确定 3、编译mysql驱动(在Qt打开mysql.pro文件) 1)在这条路径中D:QT5.14.25.1

    2024年02月04日
    浏览(45)
  • QT的mysql(数据库)最佳实践和常见问题解答

    涉及到数据库,首先安利一个软件Navicat Premium,用来查询数据库很方便  QMysql驱动是Qt SQL模块使用的插件,用于与MySQL数据库进行通信。要编译QMysql驱动,您需要满足以下条件: 您需要安装MySQL的客户端库和开发头文件,这些文件通常随MySQL的安装程序一起提供,或者可以从

    2024年02月12日
    浏览(64)
  • QT 5.9.9 配置使用 MYSQL5.7 数据库

    目录 Mysql下载安装 QT 下载安装 编译MYSQL mingw构建方式 msvc构建方式 QT中MYSQL测试使用 因为版权问题,Qt本身不自带Mysql数据库的驱动,因此如果想要借用Qt操作Mysql数据库,需要手动进行编译。 【Qt】 Mysql服务端安装教程 【Qt】 Mysql 库安装 1,可以选择安装服务端或者安装库文件

    2024年02月11日
    浏览(56)
  • QT连接MySql数据库失败,编译驱动问题,最详细解决办法

    各位读者你们好🔥 此篇是本专栏的第一篇,本专栏专门收录在学习过程中遇到的环境配置、软件问题等开发环境方面的问题。🚀🚀🚀 刚刚转阴就迫不及待的赶紧写一篇博客来解决一直落下的一个问题: 关于QT和MySql数据库的连接问题😷(在本人经过整整三天的无限踩坑之

    2024年02月05日
    浏览(56)
  • Qt+MySql开发笔记:Qt5.9.3的msvc2017x64版本编译MySql8.0.16版本驱动并Demo连接数据库测试

    若该文为原创文章,转载请注明原文出处 本文章博客地址:https://hpzwl.blog.csdn.net/article/details/130381428 红胖子网络科技博文大全:开发技术集合(包含Qt实用技术、树莓派、三维、OpenCV、OpenGL、ffmpeg、OSG、单片机、软硬结合等等)持续更新中…   mysql驱动版本msvc2015x32版本调

    2023年04月26日
    浏览(87)
  • 算法、数据结构、计算机系统、数据库MYSQL、概率论、数学实验MATLAB、数学建模、马原、英语、杂项、QT项目

    可以三个条件 以此类推 (condition1)?x:(condition2)?y:z string变成int int 变成string 可以用循环 模运算展开式推导 我们要证明等式: (a * b) mod m = ((a mod m) * (b mod m)) mod m 假设 a = q1 * m + r1 ,其中 q1 是 a 除以 m 的商, r1 是 a 除以 m 的余数。类似地,假设 b = q2 * m + r2 ,其中

    2024年02月08日
    浏览(66)
  • 5、QT中SQLite数据库的操作

    执行数据库操作的类: SQLite3的基础教程 ①、创建数据库的链接对象: ②、使用数据库驱动 ③、设置数据库的名称(创建一个数据库) ④、创建一张表 例子: 例子: ①、遍历所有数据并保存 ②、对比数据 例子: 查询数据的时候,必须要先把遍历的数据保存在sqlQuery类中

    2024年02月09日
    浏览(50)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包