我正在嘗試連接到 MySQL 資料庫并使用hdbc和運行 SQL 查詢hdbc-odbc
main :: IO ()
main = do
mysqlSettings <- readMySQLSettings
putStr "Connecting to MySQL database..."
mysqlConn <- connectODBC $ buildMySQLConnectionString mysqlSettings
putStrLn "Connected"
_ <- run mysqlConn "USE np" []
putStrLn " Done."
資料庫連接正常,但隨后在運行 SQL 查詢 ( _ <- run mysqlConn "USE np" []) 時出現以下錯誤。
SqlError {seState = "", seNativeError = -1, seErrorMsg = "Tried to use a disposed ODBC Connection handle"}
據我了解,錯誤似乎表明連接一經創建就立即被釋放。此問題僅在連接到遠程資料庫(在本例中為 Amazon RDS)時發生,而不適用于我的本地 MySQL 實體。
uj5u.com熱心網友回復:
我猜當您使用內部使用libmysqlclient. 問題是,libmysqlclient不會重新啟動被信號中斷的系統呼叫,并且 GHC 運行時在內部使用信號。
您可以通過查看來了解如何避免這種情況Database.HDBC.MySQL.withRTSSignalsBlocked。簡而言之,此功能塊SIGALRM以及SIGVTALRMGHC 運行時在執行代碼塊時使用的功能塊。可以直接使用這個函式,也可以直接復制,不想依賴的也可以HDBC-mysql。
uj5u.com熱心網友回復:
原來問題出在cpp-options我盲目地添加到cabal檔案中。
...
cpp-options: -DDCABAL_BUILD_DEVELOPER
build-depends:
base >=4.14.2.0
...
我不知道DDCABAL_BUILD_DEVELOPER是用來做什么的。禁用cpp-options修復了問題。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/359152.html
