Haskell, HDBC, ODBC, MySQL и Mac OS X - PullRequest
       24

Haskell, HDBC, ODBC, MySQL и Mac OS X

3 голосов
/ 31 августа 2009

Я пытаюсь использовать 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. Примерно в этот момент:

"# Добавьте драйвер mysql в файл odbcinst.ini (в $ ODBC_HOME / etc /) и ваш источник данных в $ HOME / .odbc.ini."

Похоже, что версия macix для unixODBC устанавливает все в / opt / local /. Я поместил odbcinst.ini в / opt / local / etc / и создал в своем домашнем каталоге файл .odbc.ini, который выглядит примерно так (обратите внимание, что я экспериментировал с UID против USERNAME и PWD против ПАРОЛЬ):

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

И я написал и скомпилировал эту программу на 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 "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 «DSN = myodbc; UID = [скрытый]; PWD = [скрытый]», в нем перечислены все таблицы в базе данных.

Ответы [ 2 ]

1 голос
/ 31 августа 2009

Это может быть проблема unixODBC, а не проблема Haskell / HDBC / HDBC-ODBC. Запуск «isql myodbc» приводит к «ошибке шины». Запуск "isql -v myodbc" больше не дает информации. Запуск isql [uid] [pwd] подключается просто отлично.

0 голосов
/ 12 ноября 2012

iODBC, поддерживаемый и поддерживаемый моим работодателем , входит в состав Mac OS X начиная с Jaguar (10.2.x).

Вам будет лучше обновить iODBC всеми последними патчами (Apple имеет тенденцию отставать от них), чем переходить на UnixODBC.

Как правило, лучше хранить все настройки ODBC в расположениях файлов по умолчанию для Mac OS X -

/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

Наконец, вы можете воспользоваться тестированием с коммерческим драйвером ODBC для MySQL, , например, одним из предложений моего работодателя (двухнедельная бесплатная пробная версия предоставляется как часть загрузки).

...