在Real World Haskell中有一个几乎相同的例子:
ghci> conn <- connectSqlite3 "test1.db"
ghci> stmt <- prepare conn "INSERT INTO test VALUES (?, ?)"
ghci> executeMany stmt [[toSql 5, toSql "five's nice"], [toSql 6, SqlNull]]
ghci> commit conn
ghci> disconnect conn
编辑
对于您的具体情况,这不是关于如何使用 HDBC 的问题,而是关于如何将一个普通的 Haskell 数据 ,y
与数据列表 , 结合起来的问题xs
。该map
函数采用单个函数并将其应用于列表中的每个元素,返回结果列表。如果我们将单曲y
放入一个函数中,我们可以map
将它放到列表中,并为列表中的每个项目获取结果。例如:
map (\x -> (x, "One Thing")) [1, 2, 3]
将导致:
[(1, "One Thing"), (2, "One Thing"), (3, "One Thing")]
要将您y
的 urlId 与xs
包含来源的 URLId 结合起来,您可以编写
map (\x -> [toSql x, toSql y]) xs
这将为您提供以下整个代码:
saveX :: [String] -> Int->IO ()
saveX [] y= return ()
sav xs y=
do conn <- connectSqlite3 "cw.db"
stmt <- prepare conn "INSERT INTO pic (src,urlId) VALUES (?,?)"
executeMany stmt (map (\x -> [toSql x, toSql y]) xs)
commit conn