我正在尝试使用Haskell(版本6.10.3)和HDBC连接到MySQL数据库。我选择使用Haskell ODBC完成此操作。我使用cabal安装了HDBC(2.1.1)和HDBC-ODBC(2.1.0.0)。我已下载并安装了MySQL ODBC驱动程序(5.1.5)。我使用macports安装了unixODBC(2.2.14_1)。所有这些都是在Mac OS X(10.5.8)上完成的。
我主要使用了这个页面上的指令http://en.wikibooks.org/wiki/Haskell/Database。大约在这一点上:
“# Add the mysql driver to odbcinst.ini file (under $ODBC_HOME/etc/) and your data source in $HOME/.odbc.ini.”
看起来macports版本的unixODBC将所有内容都安装在/opt/local/下。我已将odbcinst.ini放入/opt/local/etc/中,并在我的主目录中创建了一个.odbc.ini,它看起来像这样(请注意,我已尝试过UID vs. USERNAME和PWD vs PASSWORD):
我主要使用了这个页面上的指令http://en.wikibooks.org/wiki/Haskell/Database。大约在这一点上:
“# Add the mysql driver to odbcinst.ini file (under $ODBC_HOME/etc/) and your data source in $HOME/.odbc.ini.”
看起来macports版本的unixODBC将所有内容都安装在/opt/local/下。我已将odbcinst.ini放入/opt/local/etc/中,并在我的主目录中创建了一个.odbc.ini,它看起来像这样(请注意,我已尝试过UID vs. USERNAME和PWD vs PASSWORD):
[ODBC 数据源] myodbc = MySQL ODBC 5.1 驱动程序
[ODBC] Trace = 0 TraceAutoStop = 0 TraceFile = TraceLibrary =
[myodbc] Driver = /usr/local/lib/libmyodbc5.so DATABASE = [隐藏] DESCRIPTION = [隐藏] SERVER = localhost PORT = 3306 UID = [隐藏] PWD = [隐藏] PASSWORD = [隐藏] USER = [隐藏]
我编写并编译了这个 Haskell 程序:
import Database.HDBC.ODBC import Database.HDBC import System
main = do args <- getArgs c <- connectODBC (args!!0) tables <- getTables c mapM_ putStrLn $ tables
当我尝试使用 "DSN=myodbc" 的 DSN 时,它会报错:
数据库:SqlError {seState = "[\"HY000\"]", seNativeError = -1, seErrorMsg = "connectODBC / sqlDriverConnect: [\"1045:[unixODBC] [MySQL] [ODBC 5.1驱动程序]用户'jamie'@'localhost'被拒绝访问(使用密码:是)\"]"}然而,当我尝试使用“DSN = myodbc; UID = [hidden]; PWD = [hidden]”的DSN时, 它列出了数据库中的所有表。