数据库建立库-Qt

数据库的连接_qt-CSDN博客

数据库连接后进行建立库的操作

库的建立需要预先声明库的库名和选择字符集以及库内的排序顺序

代码部分逻辑

一、void skySQL::onConnectClicked():数据库连接核心处理

cpp 复制代码
void skySQL::onConnectClicked() {
    if (m_conn) {
        mysql_close(m_conn);
        m_conn = nullptr;
        addLog("已关闭旧连接", LogLevel::Info);
    }

    m_conn = connectToDatabase();
    if (m_conn) {
        // 移除 displayDatabaseInfo();  // 不再显示表信息
        QLabel* label = new QLabel("<h2>数据库连接成功</h2><p>您现在可以选择其他功能,如新建库或表管理。</p>");
        label->setWordWrap(true);
        label->setStyleSheet("padding: 10px;");
        resultDisplay->setWidget(label);  // 只显示连接成功消息
        addLog("数据库连接成功", LogLevel::Info);  // 移除"已加载表结构"
    }
    else {
        addLog("数据库连接失败,请检查配置", LogLevel::Error);
    }
}
cpp 复制代码
MYSQL* skySQL::connectToDatabase() {
    QString hostStr = hostEdit->text();
    QByteArray hostBa = hostStr.toUtf8();
    const char* host = hostBa.constData();

    QString userStr = userEdit->text();
    QByteArray userBa = userStr.toUtf8();
    const char* user = userBa.constData();

    QString databaseStr = databaseEdit->text();
    QByteArray databaseBa = databaseStr.toUtf8();
    const char* database = databaseBa.constData();

    QString passwordStr = passwordEdit->text();
    QByteArray passwordBa = passwordStr.toUtf8();
    const char* password = passwordBa.constData();

    int port = portEdit->text().toInt();

    MYSQL* conn = mysql_init(NULL);
    if (!conn) {
        addLog("MySQL初始化失败", LogLevel::Error);
        return nullptr;
    }
    addLog("MySQL初始化成功", LogLevel::Info);

    if (!mysql_real_connect(conn, host, user, password, database, port, NULL, 0)) {
        addLog(QString("连接数据库失败: %1").arg(mysql_error(conn)), LogLevel::Error);
        mysql_close(conn);
        return nullptr;
    }
    addLog("成功连接到MySQL数据库", LogLevel::Info);
    return conn;
}
步骤 代码逻辑 作用与细节
1 检查m_conn是否非空,若有则关闭 避免 "旧连接未释放" 导致的资源泄漏: - 用mysql_close(m_conn)关闭 MySQL 连接 - 将m_conn置为nullptr,标记 "无活跃连接" - 记录 "已关闭旧连接" 的 Info 日志
2 调用connectToDatabase()获取新连接,赋值给m_conn 复用之前的连接创建函数(connectToDatabase()返回MYSQL*句柄): - m_connskySQL类的成员变量 ,用于在整个类中共享 "当前活跃连接" - 这一步是 "连接成功的关键"------ 后续新建数据库必须依赖m_conn
3 连接成功(m_conn非空) 反馈结果给用户: - 生成 HTML 格式的提示("连接成功,可新建库 / 管理表") - 用resultDisplay->setWidget(label)将提示显示到界面(resultDisplay应该是个容器,比如QScrollArea) - 记录 "连接成功" 的 Info 日志
4 连接失败(m_conn为空) 记录 "连接失败,请检查配置" 的 Error 日志,无界面提示(仅日志)
模块 2:点击 "创建数据库" 按钮的业务逻辑(信号槽)

这是新建库的核心,逻辑分为 "前置校验""SQL 执行""成功 / 失败处理" 三部分,步骤严谨

步骤 1:前置校验(拦截非法操作)
步骤 2:构造并执行 "新建数据库" SQL
步骤 3:执行成功后的处理(反馈详细信息)
cpp 复制代码
  // 信号槽
  connect(createDbButton, &QPushButton::clicked, this, [this]() {
      if (!m_conn) {
          QLabel* label = new QLabel("<h3>请先连接数据库,再新建库。</h3>");
          label->setWordWrap(true);
          resultDisplay->setWidget(label);
          addLog("未连接数据库,无法创建新库", LogLevel::Warning);
          return;
      }

      QString dbName = newDbNameEdit->text().trimmed();
      QString charset = charsetCombo->currentText();
      QString collation = collationCombo->currentText();

      if (dbName.isEmpty()) {
          QLabel* label = new QLabel("<h3>数据库名称不能为空</h3>");
          label->setWordWrap(true);
          resultDisplay->setWidget(label);
          addLog("数据库名称为空,无法创建", LogLevel::Error);
          return;
      }

      QString createQuery = QString("CREATE DATABASE `%1` CHARACTER SET %2 COLLATE %3;")
          .arg(dbName, charset, collation);

      if (mysql_query(m_conn, createQuery.toUtf8().constData()) == 0) {
          addLog(QString("成功创建数据库: %1 (字符集=%2, 排序规则=%3)").arg(dbName, charset, collation), LogLevel::Info);
相关推荐
爱吃猫的鱼星1 小时前
SQL 分类
数据库·oracle
数数科技的数据干货2 小时前
从爆款到厂牌:解读游戏工业化的业务持续增长道路
运维·数据库·人工智能
熊猫在哪2 小时前
macos安装mysql
数据库·mysql·macos
q***46522 小时前
在Django中安装、配置、使用CKEditor5,并将CKEditor5录入的文章展现出来,实现一个简单博客网站的功能
数据库·django·sqlite
不光头强5 小时前
Spring框架的事务管理
数据库·spring·oracle
百***92027 小时前
【MySQL】MySQL库的操作
android·数据库·mysql
q***76667 小时前
Spring Boot 从 2.7.x 升级到 3.3注意事项
数据库·hive·spring boot
信仰_2739932438 小时前
Redis红锁
数据库·redis·缓存
人间打气筒(Ada)8 小时前
Centos7 搭建hadoop2.7.2、hbase伪分布式集群
数据库·分布式·hbase
心灵宝贝8 小时前
如何在 Mac 上安装 MySQL 8.0.20.dmg(从下载到使用全流程)
数据库·mysql·macos