簡體   English   中英

創建數據庫連接時訪問讀取沖突

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM