[英]Access reading violation when creating a database connection
我正在嘗試在 c++ 中編寫一個基本的 http 服務器,我需要從本地數據庫中獲取信息。 我正在使用 MySql c++ 連接器和舊版 API 但在創建連接時我收到此異常:
HTTP_SERVER.exe 中 0x00007FFE69031416 (vcruntime140d.dll) 處的未處理異常:0xC0000005:訪問沖突讀取位置 0xFFFFFFFFFFFFFFFF。
使用此代碼:
void Database_connection::connect(sql::SQLString& host, sql::SQLString& username,
sql::SQLString& password, sql::SQLString& DBName) {
try {
sql::Driver* sqlDriver = get_driver_instance();
// enstablish connection
if (sqlDriver != nullptr) {
connection = sqlDriver->connect(host, username, password);
}
// use the given database
connection->setSchema(DBName);
} catch (sql::SQLException e) {
std::cout << e.what() << " // " << e.getErrorCode() << " // " << e.getSQLState() << " // " << std::endl;
} catch (std::exception& e) {
std::cout << e.what() << std::endl;
} catch (...) {
std::cout << "throwed something" << std::endl;
}
}
特別是在connection = sqlDriver->connect(host, username, password);
現在,這只發生在發布模式下,在調試中一切都很好; 字符串主機,用戶名和密碼正確,驅動程序也應該沒問題。
你能幫助我嗎?
驅動程序很可能會引發一個源自sql::SQLException
的異常。 當您按值捕獲時,您無法捕獲派生異常。
相反,您應該按引用接受(這是一般規則:按值拋出,按引用捕獲)。 這樣你就可以訪問what()
字符串,它應該更詳細地告訴你實際出了什么問題。
此外, get_driver_instance
也可能引發異常,但調用駐留在 try-catch 塊之外。
最后,您使用不同的變量driver
(成員變量? - 缺少聲明)打開連接,而不是您分配驅動程序 object 的連接(分配給局部變量的 object 正在泄漏。)。
自己修復了,仍然不知道問題出在哪里,但我從連接器 c++重新下載了發布和調試庫並使用適當的庫重新構建
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.