mkdir mysql-test
cd mysql-test
cabal sandbox init
到https://www.stackage.org/ 下载对(zui)应(xin)的cabal.config,放在mysql-test文件夹中
以下4个安装要一个个装,不然会出现卡死的情况
cabal install alex
cabal install happy
cabal install c2hs
cabal install haddock
下载pcre
http://sourceforge.net/projects/pcre/files/pcre/8.37/pcre-8.37.tar.bz2/download
解压之后用sudo 执行./configure ,会在目录中出现pcre.h
安装pcre-light
cabal install --extra-include-dirs=/Users/brant/program/lib/pcre-8.37 pcre-light
为了安装mysql,需要创建一个软链,否则就会出现找不到/libmysqlclient.18.dylib的错误
sudo ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.18.dylib
安装mysql
cabal install --extra-prog-path=/usr/local/mysql-5.6.22-osx10.8-x86_64/bin mysql-0.1.1.8
安装mysql-simple
cabal install --extra-prog-path=/usr/local/mysql-5.6.22-osx10.8-x86_64 mysql-simplee-0.2.2.5
执行hs
ghci -no-user-package-db -package-db .cabal-sandbox/x86_64-osx-ghc-7.10.2-packages.conf.d/ test.hs
cd mysql-test
cabal sandbox init
到https://www.stackage.org/ 下载对(zui)应(xin)的cabal.config,放在mysql-test文件夹中
以下4个安装要一个个装,不然会出现卡死的情况
cabal install alex
cabal install happy
cabal install c2hs
cabal install haddock
下载pcre
http://sourceforge.net/projects/pcre/files/pcre/8.37/pcre-8.37.tar.bz2/download
解压之后用sudo 执行./configure ,会在目录中出现pcre.h
安装pcre-light
cabal install --extra-include-dirs=/Users/brant/program/lib/pcre-8.37 pcre-light
为了安装mysql,需要创建一个软链,否则就会出现找不到/libmysqlclient.18.dylib的错误
sudo ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.18.dylib
(2015.10.2 更新)
http://mac.pcbeta.com/thread-164373-1-1.html
因为新的Ei Capitan禁止修改内核,所以链接地址由/usr/lib修改至/usr/local/lib
安装mysql
cabal install --extra-prog-path=/usr/local/mysql-5.6.22-osx10.8-x86_64/bin mysql-0.1.1.8
安装mysql-simple
cabal install --extra-prog-path=/usr/local/mysql-5.6.22-osx10.8-x86_64 mysql-simplee-0.2.2.5
执行hs
ghci -no-user-package-db -package-db .cabal-sandbox/x86_64-osx-ghc-7.10.2-packages.conf.d/ test.hs
或者ghci -package-db .cabal-sandbox/x86_64-osx-ghc-7.10.2-packages.conf.d/ test.hs
或者 cabal run/cabal build
{-# LANGUAGE BangPatterns, DeriveDataTypeable, OverloadedStrings #-}
import MySQL
import Database.MySQL.Simple
import Database.MySQL.Simple.QueryResults
import Database.MySQL.Simple.Result
import Control.Monad.Reader
import Database.MySQL.Simple.Types (Binary(..), In(..), Only(..), Query(..))
main :: IO ()
main = do
-- conn <- connect defaultConnectInfo
conn <- connect defaultConnectInfo {connectHost = "127.0.0.1", connectPort = 3306, connectUser = "username", connectPassword = "password", connectDatabase = "report"}
users <- query conn "select name,age from users where age > ?" (Only (20::Int))
_ <- putStrLn $ show $ map name users
return ()
data User = User { name :: String, age :: Int,sex :: String } deriving Show
instance QueryResults User where
convertResults [fa] [va] = User { name = convert fa va, age = 10,sex="unknown"}
convertResults [fa,fb] [va,vb] = User { name = a, age = b , sex = "female" }
where a = convert fa va
b = convert fb vb
convertResults [fa,fb,fc] [va,vb,vc] = User{name = a, age =b ,sex =c}
where a = convert fa va
b = convert fb vb
c = convert fc vc
convertResults fs vs = convertError fs vs 2
selectUserAllInformation :: SqlQuery [User]
selectUserAllInformation = sqlQuery_ "select sex, age,name from users"
selectUserByFemale :: SqlQuery [User]
selectUserByFemale = sqlQuery_ "select name,age from users where sex='female'"
--selectUserByFemale = query c "select name,age from users where age > ?" ('Only' (42:Int))