我正在使用mysql-haskell包。我想编写我的查询,然后按列名从行中获取每个值。但我把这些碎片放在一起很麻烦。
Here是我正在使用的查询功能。
queryStmt :: MySQLConn -> StmtID -> [MySQLValue] -> IO ([ColumnDef], InputStream [MySQLValue])
这是我目前的代码。
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE ScopedTypeVariables #-}
module Main where
import Database.MySQL.Base
import Data.Binary.Get
import qualified System.IO.Streams as Streams
import Data.Word
import Data.Traversable
main :: IO ()
main = do
conn <- connect defaultConnectInfo {ciUser = "ffxi_auction_house", ciDatabase = "darkstar" }
s <- prepareStmt conn "SELECT itemid FROM item_armor WHERE name = ?"
(def:defs, is) <- queryStmt conn s [MySQLText "moogle_suit"]
armorStreams <- Streams.toList is
armors <- forM armorStreams $ \(MySQLInt16U value:_) -> return ItemArmor { itemid = value }
print armors
data ItemArmor = ItemArmor
{
itemid :: !Word16
} deriving (Show)
querystmt返回数据矩阵列的列表。 这实际上有效,但我必须依赖于返回集的顺序。
有一个名为getTextField的函数我一直在看,但我无法弄清楚它是如何适合的。
getTextField :: ColumnDef -> Get MySQLValue