我试图使用Haskell中的MySQL-simple软件包从我的MySQL表中检索日期,并且我一直收到以下错误:
mysql-simple.hs:12:17:
No instance for (Database.MySQL.Simple.Result.Result Day)
arising from a use of `query_'
' record_date'是MySQL表中的一个类型为Date的列,不允许为null。
我的源代码如下,任何人都可以了解在Haskell中从MySQL检索日期的适当方法吗?
{-# LANGUAGE OverloadedStrings #-}
import Control.Monad
import Data.Text
import Data.Time.Clock (UTCTime)
import Data.Time.Calendar (Day)
import Data.ByteString (ByteString)
import Database.MySQL.Simple
main = do
conn <- connect defaultConnectInfo { connectUser = "haskell", connectPassword = "hpasswd", connectDatabase = "hdbase" }
rset <- query_ conn "select symbol, record_date, low, high, open, close from performance where symbol = 'AAPL' order by record_date desc limit 5"
forM_ rset $ \(s, r, l, h, o, c) -> do
print $ unpack s ++ (show (l::Double)) ++ (show (h::Double)) ++ (show (o::Double)) ++ (show (c :: Double))
print $ show (r :: Day)
答案 0 :(得分:1)
经过一些进一步的探索并尝试从ghci执行代码后,我收到了一个错误,该错误表明在2个不同的库中存在重叠的定义,并且GHCI无法确定哪个是合适的使用它必须挽救。消息:
GHCi runtime linker: fatal error: I found a duplicate definition for symbol
get_current_timezone_seconds
whilst processing object file
/home/user/.cabal/lib/time-1.5.0.1/ghc-7.6.3/HStime-1.5.0.1.o
This could be caused by:
* Loading two different object files which export the same symbol
* Specifying the same object file twice on the GHCi command line
* An incorrect `package.conf' entry, causing some object to be
loaded twice.
GHCi cannot safely continue in this situation. Exiting now. Sorry.
查看此错误之前的“正在加载包”语句,我注意到系统正在尝试加载时间1.4.0.1然后加载时间1.5.0.1。由于我一直在尝试找到访问MySQL的首选库,我已经安装了persistent-mysql,hdbc-mysql和其他几个。反过来我已经卸载了每个,但显然有些残留物被遗忘了。删除time-1.5.0.1库后,我重新编译了原始代码并运行它没有问题。
最后,似乎ghc正在输出相应的错误消息,但我没有足够的信息来确定根本原因(即2个不同版本的时间包带来的2个不同的日期定义)。现在所有人都修好了......是的。