使用 ezsqlite 進行 SQLite 的 CREATE、INSERT、SELECT 操作

任務

資料庫 / SQLite / SQLite 的 CREATE、INSERT、SELECT 操作

使用的 Opam 套件

  • ezsqlite 使用版本測試:0.4.2 — 使用的函式庫:ezsqlite

程式碼

開啟或建立(如果不存在)SQLite 資料庫

let db = Ezsqlite.load "employees.sqlite"

建立 employees 資料表。函式 run_ign(「執行並忽略」)執行查詢並捨棄資料庫回應。

let () =
  Ezsqlite.run_ign db
    "CREATE TABLE employees (
        name VARCHAR NOT NULL,
        firstname VARCHAR NOT NULL,
        age INTEGER NOT NULL
    )"
    ()

type employee =
  { name:string; firstname:string; age:int }

let employees = [
  {name = "Dupont"; firstname = "Jacques"; age = 36};
  {name = "Legendre"; firstname = "Patrick"; age = 42}
  ]

let () =

函式 Ezsqlite.prepare 準備語句,以便稍後將實際值繫結到變數 :name:firstname:age

  let stmt = Ezsqlite.prepare db
    {| 
      INSERT into employees
      VALUES (:name, :firstname, :age)
    |}
  in

依序執行這些 Ezsqlite 函式會將 employee 記錄中的值繫結並執行查詢。

  let insert_employee (employee: employee) =
    Ezsqlite.clear stmt;
    Ezsqlite.bind_dict stmt
      [":name", Ezsqlite.Value.Text employee.name;
      ":firstname", Ezsqlite.Value.Text
        employee.firstname;
      ":age", Ezsqlite.Value.Integer
        (Int64.of_int employee.age)];
    Ezsqlite.exec stmt
  in
  employees
  |> List.iter insert_employee 

iter 函式執行查詢,然後將給定的函式映射到資料庫傳回的所有列。

let () =
  let stmt = Ezsqlite.prepare db
    "SELECT name, firstname, age from employees"
  in
  let print_employee row =

可以使用 Ezsqlite.textblobint64intdouble 函式來讀取個別欄位的值。

請注意,這不是型別安全的,因為您需要在此處為欄位提供正確的型別。

    let name = Ezsqlite.text row 0
    and firstname = Ezsqlite.text row 1
    and age = Ezsqlite.int row 2
    in
    Printf.printf "name=%s, firstname=%s, age=%d\n"
      name firstname age
  in
  Ezsqlite.iter stmt print_employee

食譜無法運作?註解不清楚或過時?

開啟問題為此食譜貢獻

此任務的其他食譜