结果日的实例声明使用MySQL-simple

时间:2015-03-23 09:17:18

标签: mysql haskell

我试图使用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)

1 个答案:

答案 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个不同的日期定义)。现在所有人都修好了......是的。