這裏是關於ErrorMisuse錯誤信息:
https://www.sqlite.org/cvstrac/wiki?p=LibraryRoutineCalledOutOfSequence
也許連接已經關閉?或者你在兩個不同的線程中使用相同的連接?
下面是一些示例代碼的工作原理:
{-# LANGUAGE OverloadedStrings #-}
import Control.Applicative
import qualified Data.Text as T
import Database.SQLite.Simple
import Database.SQLite.Simple.FromRow
dumpTable conn table = do
r <- query_ conn "SELECT * from test" :: IO [(Int,String,Int)]
mapM_ print r
main :: IO()
main = do
conn <- open "test.db"
execute_ conn "CREATE TABLE IF NOT EXISTS test (id INTEGER PRIMARY KEY, firstname TEXT, pets INTEGER)"
execute conn "INSERT INTO test (firstname, pets) VALUES (?,?)"
("Alice" :: String, 2 :: Int)
execute conn "INSERT INTO test (firstname, pets) VALUES (?,?)"
("Bob" :: String, 3 :: Int)
putStrLn "before:"
dumpTable conn "test"
execute conn "UPDATE TEST SET pets = pets + ?" (Only (4 :: Int))
putStrLn "after:"
dumpTable conn "test"
close conn
什麼是錯誤訊息?它是編譯器錯誤還是運行時錯誤? – ErikR
這是一個運行時錯誤:SQLite3在嘗試執行準備時返回了ErrorMisuse「UPDATE測試SET v =?」:調用序列外的庫例程 – Relu