[Haskell] Jak przerobić "Database.HaskellDB.GenericConnect" na "Database.HDBC.ODBC"?
Ostatnio zmodyfikowano 2016-02-29 19:41
DejaVu Temat założony przez niniejszego użytkownika |
[Haskell] Jak przerobić "Database.HaskellDB.GenericConnect" na "Database.HDBC.ODBC"? » 2016-02-29 12:23:12 Mam bardzo stary kod, który wygląd mniej więcej tak: import Database.HaskellDB.GenericConnect import Database.HaskellDB.Query (Table(..)) import Database.HaskellDB.PrimQuery (TableName)
connect :: [String] -> (Database -> IO a) -> IO a connect (driver:args) = genericConnect driver args connect _ = error "No driver argument supplied"
foraConnect :: (Database -> IO a) -> IO a foraConnect f = do connect ["mysql", "localhost", "baza", "login", "haslo"] $ \db -> transaction db (f db)
Na aktualnym systemie operacyjnym nie mam jednak pakietu GenericConnect i chciałbym go przerobić na coś bardziej aktualnego. Wydaje mi się, że trzeba przerobić to na Database.HDBC.ODBC. Problem w tym, że niezbyt przyjemny jest ten język i coś mi przeróbki nie wychodzą :P Znalazłem w necie przykład, który teoretycznie łączy się z MySQL-em po 'nowemu': import Database.HDBC import qualified Database.HDBC.ODBC as ODBC import Control.Monad
main :: IO () main = dbTest
dbTest :: IO () dbTest = do connHandle <- Database.HDBC.ODBC.connectODBC "Driver={MySql};Server=localhost;Option=131072;Port=3306;Stmt=;DataBase=baza;Uid=login;Pwd=haslo;" replicateM_ 20000 (loop connHandle) disconnect connHandle where loop c = do result <- getTables c commit c putStrLn $ show result
Jeżeli ktoś ma wiedzę z Haskella to prosiłbym o informację jak powinien wyglądać przytoczony fragment kodu pierwszego programu tak, aby łączył się on z bazą danych MySQL za pomocą tego, co zostało przytoczone w drugim programie. |
|
Monika90 |
» 2016-02-29 18:37:00 Przerobienie tych dwóch funkcji z pierwszego pliku prawdopodobnie nie wystarczy, trzeba będzie jeszcze zmienić miejsca z których są wywoływane. Tę drugą można przerobić tak foraConnect :: IConnection conn => (conn -> IO a) -> IO a foraConnect f = do c <- Database.HDBC.ODBC.connectODBC "Driver={MySql};Server=localhost;Option=131072;Port=3306;Stmt=;DataBase=baza;Uid=login;Pwd=haslo;" withTransaction c f
chyba, bo nawet nie mam tego jak sprawdzić. Sprawdzałeś czy ten drugi przykładowy kod da się uruchomić i czy faktycznie łączy się z bazą danych? |
|
DejaVu Temat założony przez niniejszego użytkownika |
» 2016-02-29 19:41:18 Nie sprawdzałem - musiałem skupić się na tym, aby skompilować stary kod i odpalić na nowej maszynie. Musiałem postawić sobie debiana 4 :) Jutro pewnie będę miał chwilę czasu, aby spróbować nawiązać połączenie z bazą danych na nowej wersji Haskella. Dziękuję więc za fragment kodu - jutro potestuję :) |
|
« 1 » |