代码之家  ›  专栏  ›  技术社区  ›  Jamie McCrindle

Haskell、HDBC、ODBC、MySQL和Mac OS X

  •  3
  • Jamie McCrindle  · 技术社区  · 15 年前

    我尝试使用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)。所有这些都是在macosx(10.5.8)上实现的。

    http://en.wikibooks.org/wiki/Haskell/Database

    “#将mysql驱动程序添加到odbcinst.ini文件文件(在$ODBC\u HOME/etc/下)和$HOME/中的数据源。odbc.ini文件."

    unixODBC的macports版本似乎将所有内容安装在/opt/local/下。我把一个odbcinst.ini文件在/opt/local/etc/中创建了一个。odbc.ini文件用户ID和密码与我的主目录中的用户名和密码类似:

    [ODBC Data Sources]
    myodbc = MySQL ODBC 5.1 Driver
    
    [ODBC]
    Trace         = 0
    TraceAutoStop = 0
    TraceFile     =
    TraceLibrary  =
    
    [myodbc]
    Driver      = /usr/local/lib/libmyodbc5.so
    DATABASE    = [hidden]
    DESCRIPTION = [hidden]
    SERVER      = localhost
    PORT        = 3306
    UID         = [hidden]
    PWD         = [hidden]
    PASSWORD    = [hidden]
    USER        = [hidden]
    
    

    import Database.HDBC.ODBC
    import Database.HDBC
    import System
    
    main = do
      args <- getArgs
      c  <-  connectODBC (args!!0)
      tables <-  getTables c
      mapM_ putStrLn $ tables
    

    当我尝试一个DSN为“DSN=myodbc”时,它的错误是:

    Database: SqlError 
      {seState = "[\"HY000\"]", 
        seNativeError = -1, 
        seErrorMsg = "connectODBC/sqlDriverConnect: 
          [\"1045: [unixODBC][MySQL][ODBC 5.1 Driver]Access 
            denied for user 'jamie'@'localhost' (using password: YES)\"]"}
    

    但是,当我尝试使用“DSN=myodbc;UID=[hidden];PWD=[hidden]”的DSN时,它会列出数据库中的所有表。

    2 回复  |  直到 13 年前
        1
  •  1
  •   Jamie McCrindle    15 年前

    这可能是unixODBC问题,而不是Haskell/HDBC/HDBC-ODBC问题。运行“isql myodbc”会导致“总线错误”。运行“isql-vmyodbc”不会提供更多信息。运行isql[uid][pwd]连接很好。

        2
  •  0
  •   TallTed    12 年前

    my employer ,自Jaguar(10.2.X)起作为Mac OS X的一部分发布。

    你会过得更好 updating iODBC with all the latest patches (苹果在这些方面往往有点落后),而不是转向UnixODBC。

    /Library/ODBC/odbc.ini
    /Library/ODBC/odbcinst.ini
    /Users/*/Library/ODBC/odbc.ini
    /Users/*/Library/ODBC/odbcinst.ini
    

    你可以从任何你想拥有这些文件的地方创建符号链接,例如--

    ln -s ~/Library/ODBC/odbc.ini ~/.odbc.ini
    

    such as one of my employer's offerings (下载时提供两周免费试用版)。