Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Database 使用Haskell中的参数更新Sqlite3_Database_Haskell_Sqlite_Sql Update - Fatal编程技术网

Database 使用Haskell中的参数更新Sqlite3

Database 使用Haskell中的参数更新Sqlite3,database,haskell,sqlite,sql-update,Database,Haskell,Sqlite,Sql Update,最近,我开始在haskell中使用sqlite3,我想知道如何在表中修改参数为offset的变量 我想这样做: execute_ conn "CREATE TABLE IF NOT EXISTS test (id INTEGER PRIMARY KEY, v INTEGER)" execute conn "INSERT INTO test (v) VALUES (?)" (Only ("1" :: String)) execute conn "UPDATE test SET v = v +

最近,我开始在haskell中使用sqlite3,我想知道如何在表中修改参数为offset的变量

我想这样做:

execute_ conn "CREATE TABLE IF NOT EXISTS test (id INTEGER PRIMARY KEY, v INTEGER)"

execute conn "INSERT INTO test (v) VALUES (?)" (Only ("1" :: String))

execute conn "UPDATE test SET v = v + ?" (Only modifyingValue) <--- this is not working
execute_uconn“如果不存在创建表测试(id INTEGER主键,v INTEGER)”
执行conn“插入测试(v)值(?)”(仅限(“1”::字符串))

执行conn“更新测试集v=v+?”(仅修改值)以下是错误误用错误的信息:

也许连接已经关闭了?或者在两个不同的线程中使用相同的连接

以下是一些有效的示例代码:

{-# 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
{-#语言重载字符串}
导入控制
导入符合条件的数据。文本为T
导入Database.SQLite.Simple
导入Database.SQLite.Simple.FromRow
dumpTable conn table=do

r以下是错误误用错误的信息:

也许连接已经关闭了?或者在两个不同的线程中使用相同的连接

以下是一些有效的示例代码:

{-# 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
{-#语言重载字符串}
导入控制
导入符合条件的数据。文本为T
导入Database.SQLite.Simple
导入Database.SQLite.Simple.FromRow
dumpTable conn table=do

r错误消息是什么?这是编译器错误还是运行时错误?这是一个运行时错误:SQLite3在尝试执行准备“更新测试集v=?”时返回错误误用:库例程按顺序调用错误消息是什么?这是一个编译器错误还是一个运行时错误?这是一个运行时错误:SQLite3在尝试执行准备“更新测试集v=?”时返回错误误用:库例程按顺序调用是的,我在3个线程中使用连接,因为我的程序的目的是测试sqlite是否为单线程。如果这是错误的原因,那么我的测试似乎证明sqlite不是多线程的。谢谢:DEach连接是单线程的,但是sqlite允许并发访问和更新,所以只需为每个线程打开一个新的连接。例如,请看这个答案:是的,我在3个线程中使用连接,因为我的程序的目的是测试sqlite是否是单线程的。如果这是错误的原因,那么我的测试似乎证明sqlite不是多线程的。谢谢:DEach连接是单线程的,但sqlite允许并发访问和更新,所以只需为每个线程打开一个新连接即可。例如,请参阅下面的答案: