首页 > 解决方案 > Haskell SQLite3 查询全部

问题描述

想确定表的大小(长度)以避免用户输入已经存在的增量 ID(注意:留下所有 Haskell 书籍以弄湿我的脚)。有一张桌子,id, task, date_in, date_out需要计算编号。使用此功能:

checkUniqueID = do
  conn <- open "taglist.db"
  len <- query conn "SELECT * FROM task;" (Only xxx) :: IO [id]
  let showLength = length $ len
  print showLength
  close conn
  return ()

但是:省略 ' Only' 会导致 ghci 提及的参数太少,但我真的不知道在 xxx 处放什么。太糟糕了,所有的 Haskell 文档都如此分散,因为它是一种很酷的语言。多谢你们!

标签: sqlitehaskell

解决方案


我对这些库不是很熟悉。我检查了文档Database.PostgreSQL.Simple 并发现,如果您的查询没有参数,则可以使用query_和省略参数元组。文档开头的示例非常有帮助。

话虽这么说,你的方法看起来是错误的。您从数据库中提取整个表只是为了计算条目。这是一种浪费:您应该改用类似select count(*) from ..的东西,以便仅查询长度。

这可能有效:(同样,我从未使用过该库)

[Only len] <- query_ conn "select count(*) from task" :: IO [Only Int]

推荐阅读