首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Haskell HDBC.Sqlite3 fetchAllRows

Haskell HDBC.Sqlite3 fetchAllRows
EN

Stack Overflow用户
提问于 2018-08-29 16:36:05
回答 1查看 84关注 0票数 0

由于我绝对是Haskell的初学者,但我决心克服它,所以我再次寻求帮助。

使用:

代码语言:javascript
复制
fetchData2 = do
  conn <- connectSqlite3 "dBase.db"
  statement <- prepare conn "SELECT * FROM test WHERE id > 0"
  execute statement []
  results <- fetchAllRows statement
  print results

返回:

代码语言:javascript
复制
[[SqlInt64 3,SqlByteString "Newco"],[SqlInt64 4,SqlByteString "Oldco"],[SqlInt64 5,SqlByteString "Mycom"],[SqlInt64 4,SqlByteString "Oldco"],[SqlInt64 5,SqlByteString "Mycom"]]

有没有一种聪明的方法可以将这些数据清理到Int[Char]中,换句话说,就是省略SqlInt64SqlByteString类型。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-08-30 02:30:20

你可以定义一个帮助器:

代码语言:javascript
复制
fetchRowFromSql :: Convertible SqlValue a => Statement -> IO (Maybe [a])
fetchRowFromSql = fmap (fmap (fmap fromSql)) . fetchRow

这个实现看起来有点吓人,但这只是因为我们需要深入到您已经注意到的分层函数器(首先是IO,然后是Maybe,最后是[])。这将返回可从SqlValue转换的内容。已经定义了一大堆这样的东西。例如,参见the docs。一个示例(使用-XTypeApplications):

代码语言:javascript
复制
fetchRowFromSql @String :: Statement -> IO (Maybe [String])

我也许应该补充一下,文档中提到fromSql是不安全的。这意味着,如果您尝试将SQL值转换为不兼容的Haskell值,程序将暂停。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52073014

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档