數據庫的連接形式可以通過cmd查看
1.獲取 UI 輸入的連接參數
// 獲取主機名(如"localhost"或IP地址)
QString hostStr = hostEdit->text(); // 從hostEdit控件獲取文本
QByteArray hostBa = hostStr.toUtf8(); // 轉換為UTF-8編碼的字節數組
const char* host = hostBa.constData(); // 轉換為C風格字符串(const char*)// 同理獲取用戶名、數據庫名、密碼
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();// 獲取端口號(轉換為整數,MySQL默認端口3306)
int port = portEdit->text().toInt();
2.初始化 MySQL 連接句柄
MYSQL* conn = mysql_init(NULL); // 初始化連接句柄
if (!conn) { // 初始化失敗(如內存不足)addLog("MySQL初始化失敗", LogLevel::Error); // 記錄錯誤日志return nullptr; // 返回空指針表示失敗
}
addLog("MySQL初始化成功", LogLevel::Info); // 初始化成功,記錄信息日志
3.?建立數據庫連接
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; // 返回有效的連接句柄
-
mysql_real_connect()
參數說明:conn
:已初始化的連接句柄(mysql_init()
的返回值)host
:MySQL 服務器主機名 / IP(如 "localhost")user
:登錄用戶名(如 "root")password
:登錄密碼database
:要連接的數據庫名(可選,可后續通過mysql_select_db()
切換)port
:端口號(MySQL 默認 3306)- 最后兩個參數:通常為
NULL
和0
(分別表示 Unix 套接字和客戶端標志)
-
連接失敗處理:
- 用
mysql_error(conn)
獲取具體錯誤信息(如 “訪問被拒絕”“主機不可達” 等)。 - 調用
mysql_close(conn)
釋放已初始化的連接句柄,避免資源泄漏。 - 返回
nullptr
表示連接失敗。
- 用
-
連接成功:返回有效的
MYSQL*
句柄,后續可通過該句柄執行 SQL 語句(如mysql_query()
)。