Haskell語言學習筆記(68)HDBC

2021-08-21 11:16:20 字數 3742 閱讀 4928

$ cabal install hdbc-sqlite3

installed hdbc-sqlite3-2.3

.3.1

prelude> :m database.hdbc database.hdbc

.sqlite3

prelude database.hdbc database.hdbc

.sqlite3>

prelude

database.hdbc

database.hdbc.sqlite3> conn <- connectsqlite3 "test1.db"

-- 連線或建立資料庫

prelude

database.hdbc

database.hdbc.sqlite3> run conn "create table test (id integer not null, desc varchar(80))" -- 建表

0prelude

database.hdbc

database.hdbc.sqlite3> run conn "insert into test (id) values (0)" -- 插入記錄

1prelude

database.hdbc

database.hdbc.sqlite3> commit conn

prelude

database.hdbc

database.hdbc.sqlite3> run conn "insert into test values (?, ?)" [tosql 0, tosql "zero"] -- 插入記錄,使用引數

1prelude

database.hdbc

database.hdbc.sqlite3> commit conn

prelude

database.hdbc

database.hdbc.sqlite3> stmt <- prepare conn "insert into test values (?, ?)"

-- 插入記錄,使用語句

prelude

database.hdbc

database.hdbc.sqlite3> execute stmt [tosql 1, tosql "one"]

1prelude

database.hdbc

database.hdbc.sqlite3> execute stmt [tosql 2, tosql "two"]

1prelude

database.hdbc

database.hdbc.sqlite3> execute stmt [tosql 3, tosql "three"]

1prelude

database.hdbc

database.hdbc.sqlite3> execute stmt [tosql 4, sqlnull]

1prelude

database.hdbc

database.hdbc.sqlite3> commit conn

prelude

database.hdbc

database.hdbc.sqlite3> stmt <- prepare conn "insert into test values (?, ?)"

prelude

database.hdbc

database.hdbc.sqlite3> executemany stmt [[tosql 5, tosql "five's nice"], [tosql 6, sqlnull]] -- 插入多條記錄,使用語句

prelude

database.hdbc

database.hdbc.sqlite3> commit conn

prelude

database.hdbc

database.hdbc.sqlite3> quickquery' conn "select * from test where id < 2" -- 查詢記錄

[[sqlint64

0,sqlnull],[sqlint64

0,sqlbytestring

"zero"],[sqlint64

1,sqlbytestring

"one"]]

prelude

database.hdbc

database.hdbc.sqlite3> quickquery' conn "select id, desc from test where id <= ? order by id, desc" [tosql 2] -- 查詢記錄,使用引數

[[sqlint64

0,sqlnull],[sqlint64

0,sqlbytestring

"zero"],[sqlint64

1,sqlbytestring

"one"],[sqlint64

2,sqlbytestring

"two"]]

prelude

database.hdbc

database.hdbc.sqlite3> stmt <- prepare conn "select * from test where id < 2"

-- 查詢記錄

prelude

database.hdbc

database.hdbc.sqlite3> execute stmt

0prelude

database.hdbc

database.hdbc.sqlite3> results <- fetchallrowsal stmt -- 惰性讀取

prelude

database.hdbc

database.hdbc.sqlite3> mapm_ print results

[("id",sqlint64

0),("desc",sqlnull)]

[("id",sqlint64

0),("desc",sqlbytestring

"zero")]

[("id",sqlint64

1),("desc",sqlbytestring

"one")]

["test"]

prelude database.hdbc database.hdbc.sqlite3> proxiedclientname conn

"sqlite3"

prelude database.hdbc database.hdbc.sqlite3> dbserverver conn

"3.19.3"

prelude database.hdbc database.hdbc.sqlite3> dbtransactionsupport conn

true

prelude database.hdbc database.hdbc.sqlite3> quickquery' conn "select * from test2"

*** exception: sqlerror

prelude database.hdbc database.hdbc.sqlite3> handlesqlerror $ quickquery' conn "select * from test2"

*** exception: user error (sql error: sqlerror )

prelude database.hdbc database.hdbc.sqlite3> disconnect conn

Haskell語言學習筆記(79)lambda演算

根據維基百科,lambda演算 英語 lambda calculus,calculus 是一套從數學邏輯中發展,以變數繫結和替換的規則,來研究函式如何抽象化定義 函式如何被應用以及遞迴的形式系統。lambda演算由 lambda 項的語言構成。基本的 lambda 項只包含以下三種 語法名稱 描述h...

Haskell學習筆記 Monads

monads 翻譯叫 單子 或者 乙個自函子上的么半群 好吧除了讓人費解沒有什麼用 同樣舉乙個書上的例子 data expr val int div expr expr eval expr maybe int eval val n pure n eval div x y pure safediv e...

Verilog HDL語言學習筆記

verilog hdl語言 verilog hdl 是一種硬體描述語言 hdl hardware discription language 是一種以文字形式來描述數字系統硬體的結構和行為的語言。用它可以表示邏輯電路圖 邏輯表示式,還可以表示數字邏輯系統所完成的邏輯功能。是由gateway desig...