任何人都知道http://hackage.haskell.org/package/sqlite-simple-0.4.9.0/docs/Database-SQLite-Simple.html是否可以运行query
或query_
,可以打印行而无需显式指定返回类型元组,以进行调试?
或者如果不是这个包,可能还有另一个?
答案 0 :(得分:1)
好的,我已经找到了一种粗暴的方法,使用direct-sqlite
,sqlite-simple
构建在其上的软件包,更深入一级。
import Database.SQLite.Simple
import Database.SQLite3.Direct (exec, execWithCallback)
let sql = "SELECT * FROM table LIMIT 3"
let cb count names vals = print vals
execWithCallback (connectionHandle conn) sql cb
在我的案例中打印的内容如下:
[Just "1",Just "2016-01-23 11:25:39.16759",Just "val1"]
[Just "2",Just "2016-01-23 11:25:40.266674",Just "val2"]
[Just "3",Just "2016-01-23 11:25:41.396901",Just "val3"]
如果有其他人知道更好的方法,请分享!
答案 1 :(得分:0)
很抱歉没有先前扫描与我的图书馆相关的问题。
这是打印出来自SELECT查询的原始SQLite值的一种方法。它不是超级干净或明显。
我们的想法是为它定义一个调试类型DebugShowType
和一个FromField
实例,它将每个SQLite行/列转换为一个字符串。
newtype DebugShowType = DebugShowType String deriving (Eq, Show, Typeable)
instance FromField DebugShowType where
fromField f = cvt f . fieldData $ f where
cvt _ v = Ok $ DebugShowType (show v)
testShowRawValues :: IO ()
testShowRawValues = do
elems <- query_ conn "SELECT 13, 'foo'" :: IO [[DebugShowType]]
mapM_ (\v -> putStrLn (show v ++ "\n")) elems
这应该打印如下:
[DebugShowType "SQLInteger 13",DebugShowType "SQLText \"foo\""]
Database.SQLite.Simple.setTrace
对于跟踪将哪些值替换为SQL查询也很有用。