qt无法连接mysql

问题遇到的现象和发生背景

img


odbc下拉不显示datebase

img


qt无法连接数据库

操作环境、软件版本等信息

win11 qt5.14.2 mysql 8.0.32

我想要达到的结果

qt成功连接数据库

  • 这篇博客: QT连接Mysql数据库(详细成功版)中的 2.ODBC连接代码 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 代码如下:

    QSqlDatabase db = QSqlDatabase::addDatabase("QODBC");
        db.setHostName("127.0.0.1");
        db.setPort(3306);
        db.setDatabaseName("刚刚在ODBC中创建的Data source name"); //不是Database,记得别填错
        db.setUserName("用户名");
        db.setPassword("密码");
        bool ok = db.open();
        if (ok){
            QMessageBox::information(this, "infor", "link success");
        }
        else {
            QMessageBox::information(this, "infor", "link failed");
            qDebug()<<"error open database because"<<db.lastError().text();
        }
    

    恭喜你走到这一步,离成功连接Mysql只差最后一步!运行代码,一般都是可以完成连接的了。


以下是使用Qt代码连接MySQL数据库的示例:

#include <QCoreApplication>
#include <QtSql>

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    // 创建数据库连接
    QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
    db.setHostName("localhost"); // 设置主机名
    db.setDatabaseName("testdb"); // 设置数据库名
    db.setUserName("root"); // 设置用户名
    db.setPassword("password"); // 设置密码

    // 打开数据库连接
    if (!db.open()) {
        qDebug() << "无法连接到MySQL数据库:" << db.lastError().text();
        return 1;
    }

    // 创建一个查询对象
    QSqlQuery query;

    // 执行SQL语句
    if (!query.exec("SELECT * FROM testtable")) {
        qDebug() << "查询失败:" << query.lastError().text();
        return 1;
    }

    // 处理查询结果
    while (query.next()) {
        QString name = query.value("name").toString();
        QString age = query.value("age").toString();
        qDebug() << "姓名:" << name << ",年龄:" << age;
    }

    // 关闭数据库连接
    db.close();

    return a.exec();
}

在上面的代码中,我们使用QSqlDatabase类创建了一个MySQL数据库连接,并通过QSqlQuery类执行了一个查询操作。您需要将代码中的主机名、数据库名、用户名和密码替换为您自己的MySQL数据库信息。如果连接成功,您将会看到查询结果输出到控制台。如果连接失败,将会输出错误信息。

有多种可能原因导致Qt无法连接MySQL,以下是一些常见的问题和解决方案:

1、MySQL服务未启动或未正确配置。请确保MySQL服务已经启动,且用户名和密码正确。

2、缺少MySQL驱动程序。请确保已经正确安装了MySQL驱动程序,可以在Qt的“帮助”菜单中找到“关于插件”来检查是否已经安装了MySQL驱动程序。

3、Qt版本和MySQL版本不兼容。请确保Qt版本和MySQL版本兼容,可以在Qt的“帮助”菜单中找到“关于Qt”来查看Qt版本号,然后在MySQL官网上查找相应的兼容版本。

4、防火墙或网络问题。请确保防火墙没有阻止Qt连接MySQL,也可以尝试在本地网络环境中测试连接是否正常。

5、数据库权限问题。请确保MySQL用户具有访问所需数据库的权限。

以上是一些常见的问题和解决方案,如果问题仍然存在,请尝试查看Qt的日志输出以获取更多信息,并参考Qt和MySQL的官方文档。

从你第一个图的报错信息 3552 - Access to system schema 'mysql' is rejected 是msyql的远程访问没有打开。
操作步骤:1、进入MySQL安装目录下的bin目录,2、在地址栏输入cmd打开命令行窗口(如果配置过环境变量直接Win+R输入cmd回车即可)
3.输入命令mysql -uroot -p回车,然后输入msyql密码,进入mysql ;4,输入命令grant all privileges on . to ‘root’@‘%’ identified by ‘password’;回车,其中password是你msyql数据库的密码,
5、输入flush privileges;回车
6、关闭窗口 重新连接

以下内容部分参考ChatGPT模型:


你好,检查一下以下几点,看看是否能够解决问题:

  1. 确认你已经安装了MySQL驱动,可以在Qt的plugins目录下找到libqsqlmysql.dll文件。如果没有,可以重新安装Qt并勾选MySQL驱动选项。
  2. 确认MySQL服务正常启动,可以在cmd命令行中输入"sc query mysql"查看服务状态。
  3. 在Qt中设置数据库连接信息时,需要注意几个参数:
    • 主机名:一般为"localhost"或"127.0.0.1"。
    • 端口号:默认为3306。
    • 数据库名:需要连接的数据库名称。
    • 用户名和密码:连接数据库的用户名和密码。
  4. 如果还是无法连接,可以尝试使用ODBC连接方式,需要先在系统中配置ODBC数据源。

以下是一个连接MySQL数据库的例子:

#include <QCoreApplication>
#include <QtSql>

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    // 创建数据库连接
    QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
    db.setHostName("localhost");
    db.setPort(3306);
    db.setDatabaseName("test_db");
    db.setUserName("username");
    db.setPassword("password");

    // 打开数据库
    if (db.open()) {
        qDebug() << "Success to connect MySQL database!";
    } else {
        qDebug() << "Failed to connect MySQL database!";
    }

    return a.exec();
}

如果我的建议对您有帮助、请点击采纳、祝您生活愉快

以下答案由GPT-3.5大模型与博主波罗歌共同编写:
出现ODBC下拉不显示database的现象可能有多种原因,下面提供一些可能的解决方法:

  1. 确保ODBC数据源管理员连接到的是正确的mysql数据库,且用户名和密码正确。

  2. 确保mysql数据库服务已经开启,可以在命令行中输入以下命令检查mysql服务状态:

    netstat -ano | findstr "3306"
    

    如果显示的状态为“LISTENING”,则说明mysql服务已经正常开启。

  3. 检查ODBC驱动是否已经正确安装并配置正确。可以再次打开ODBC数据源管理员,通过“添加”按钮查看是否有“MySQL ODBC 8.0 ANSI Driver”和“MySQL ODBC 8.0 Unicode Driver”驱动,如果没有则需要下载并安装相应的驱动。

  4. 检查环境变量是否正确配置,如果没有配置则需要手动添加。可以在系统环境变量中添加MYSQL_HOME变量,指向安装mysql服务的路径,例如“C:\Program Files\MySQL\MySQL Server 8.0”。

  5. 最后,重新启动ODBC数据源管理员,查看是否成功连接到mysql数据库。

关于Qt无法连接mysql的问题,可以尝试以下步骤:

  1. 确认mysql数据库已经正确安装,并且账号、密码正确。

  2. 在Qt中添加mysql相关库,可以通过.pro文件添加以下代码:

    QT += sql
    LIBS += -lmysql
    
  3. 在Qt中使用QSqlDatabase连接mysql数据库,可以参考以下代码:

    #include <QSqlDatabase>
    #include <QSqlError>
    #include <QSqlQuery>
    
    QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
    db.setHostName("localhost");
    db.setUserName("root");
    db.setPassword("password");
    db.setDatabaseName("testdb");
    if (!db.open()){
        qDebug() << "Database error:" + db.lastError().text();
    }else{
        qDebug() << "Database connection success!";
    }
    

    注意需要将”localhost”改成你的mysql服务所在的服务器地址,”root”和”password”改成你的mysql账号和密码,”testdb”改成你要连接的mysql数据库名称。

  4. 然后就可以使用QSqlQuery进行数据操作了,例如:

    QSqlQuery query;
    query.exec("SELECT * FROM tablename");
    while (query.next()) {
        int id = query.value(0).toInt();
        QString name = query.value(1).toString();
        // TODO: do something with the data
    }
    

    这段代码可以查询tablename表中的数据,并将数据逐行读取到id和name变量中。
    如果我的回答解决了您的问题,请采纳!

解决Ubuntu下Qt无法连接MySQL数据库[Linux环境]
可以借鉴下
https://blog.csdn.net/kongcheng253/article/details/128520725

以下回答引用自chatGpt, 有用的话,请采纳哇!!!
报错 3552 - Access to system schema 'mysql' is rejected 可能是由于在 MySQL 8.0.16 或更高版本中更改了默认权限模型导致的。在新的默认模型中,MySQL 8.0.16+ 禁止访问系统架构表。因此,需要重新分配用户的权限才能连接到数据库。

为了解决此问题,可以通过以下步骤重新分配用户的权限:

  1. 登录 MySQL 数据库,使用管理员账户。

  2. 运行以下 SQL 语句以创建新的用户并授予所需的权限:

    CREATE USER 'new_user'@'localhost' IDENTIFIED BY 'password';
    GRANT ALL PRIVILEGES ON *.* TO 'new_user'@'localhost' WITH GRANT OPTION;
    FLUSH PRIVILEGES;
    

    上面的语句创建了一个名为 new_user 的新用户,并授予该用户在所有数据库和表上执行所有操作的权限。注意,在实际情况下,您应该替换用户名和密码。

  3. 然后使用新用户连接数据库,应该可以正常连接并使用。

如果还是无法解决问题,还可以尝试使用旧的权限模型。在 MySQL 8.0.16 或更高版本中,可以通过将 default_authentication_plugin 设置为 mysql_native_password 来使用旧的权限模型。可以通过以下步骤执行此操作:

  1. 在 MySQL 配置文件中,找到 mysqld 部分。

  2. 添加以下行:

    [mysqld]
    default_authentication_plugin=mysql_native_password
    
  3. 保存并关闭配置文件,然后重新启动 MySQL 服务器。

在完成上述操作后,应该可以正常连接到 MySQL 数据库。

希望以上方法能够帮助您解决问题。