やってみる

アウトプットすべく己を導くためのブログ。その試行錯誤すらたれ流す。

Rust自習(SQLite 1)

 生のSQL文を発行する。

成果物

sqlite3クレート

 標準ライブラリには無いと思われる。

  1. crate.ioにて検索
  2. sqlite3クレート発見

 SQL文を直接書いて実行するヤツっぽい。

コーディング

クレート新規作成

$ cargo new sqlite3_mini --bin

sqlite3クレート依存設定

Cargo.toml

[dependencies]
sqlite3 = "0.24.0"

 sqlite3クレートのダウンロードと実行。

$ cargo test
    Updating crates.io index
  Downloaded sqlite3 v0.24.0
  Downloaded libc v0.2.60
  Downloaded sqlite3-sys v0.12.0
  Downloaded sqlite3-src v0.2.11
  Downloaded cc v1.0.38
   Compiling pkg-config v0.3.14
   Compiling cc v1.0.38
   Compiling libc v0.2.60
   Compiling sqlite3-src v0.2.11
   Compiling sqlite3-sys v0.12.0
   Compiling sqlite3 v0.24.0
   Compiling sqlite3_mini v0.1.0 (/tmp/work/sqlite3_mini)
    Finished dev [unoptimized + debuginfo] target(s) in 3m 06s

 約3分かかった。

コード

 サンプルコードをほぼ丸パクリ。

fn main() {
//    let connection = sqlite::open(":memory:").unwrap();
//    let connection = sqlite3::sqlite::open(":memory:").unwrap();
    let connection = sqlite3::open(":memory:").unwrap();
    connection
        .execute(
            "
            CREATE TABLE users (name TEXT, age INTEGER);
            INSERT INTO users (name, age) VALUES ('Alice', 42);
            INSERT INTO users (name, age) VALUES ('Bob', 69);
            ",
        )
        .unwrap();
    connection
        .iterate("SELECT * FROM users WHERE age > 50", |pairs| {
            for &(column, value) in pairs.iter() {
                println!("{} = {}", column, value.unwrap());
            }
            true
        })
        .unwrap();

}

 実行結果。

name = Bob
age = 69

 ただし、sqlite::ではエラーになった。sqlite3::にすると解決した。

error[E0433]: failed to resolve: use of undeclared type or module `sqlite`
 --> src/lib.rs:3:22
  |
3 |     let connection = sqlite::open(":memory:").unwrap();
  |                      ^^^^^^ use of undeclared type or module `sqlite`

対象環境

$ uname -a
Linux raspberrypi 4.19.42-v7+ #1219 SMP Tue May 14 21:20:58 BST 2019 armv7l GNU/Linux

前回まで