从Scotite的SQLite3数据库中检索值

时间:2014-10-12 15:42:43

标签: sqlite haskell hdbc scotty

我试图从SQLite数据库(HDBC.sqlite3)获取信息,以使用Scotty框架提供给Web视图。我目前正试图完成一个"抓住所有"或者更确切地说,从表中选择所有信息,然后将其返回到我在通过Scotty运行的网页上显示。我遇到了一个错误,我在弄清楚如何修复它时遇到了一些麻烦。

这是我的错误:

Controllers/Home.hs:42:44:
Couldn't match expected type `Data.Text.Lazy.Internal.Text'
            with actual type `IO [[(String, SqlValue)]]'
In the expression: getUsersDB
In the first argument of `mconcat', namely
  `["<p>/users/all</p><p>", getUsersDB, "</p>"]'
In the second argument of `($)', namely
  `mconcat ["<p>/users/all</p><p>", getUsersDB, "</p>"]'

这是我的代码:

import Control.Monad
import Web.Scotty (ScottyM, ActionM, get, html, param, text)
import Data.Monoid (mconcat)
import Controllers.CreateDb (createUserDB)
import Database.HDBC
import Database.HDBC.Sqlite3
import Control.Monad.Trans ( MonadIO(liftIO) )
import Data.Convertible

getAllUsers :: ScottyM()
getAllUsers = get "/users/all" $ do
  html $ mconcat ["<p>/users/all</p><p>", getUsersDB , "</p>"]

getUsersDB = do
  conn <- connectSqlite3 databaseFilePath
  stmt <- prepare conn "SELECT name FROM users VALUES"
  results <- fetchAllRowsAL stmt
  disconnect conn
  return (results)

1 个答案:

答案 0 :(得分:1)