8个版本

0.4.3 2024年1月16日
0.4.2 2022年12月7日
0.4.1 2022年7月10日
0.3.0 2022年5月7日
0.1.0 2021年8月25日

#1642数据库接口

每月 33 次下载

MIT 许可证

320KB
6.5K SLoC

firebirust

firebirust是Firebird RDBMS数据库的数据库驱动,使用Rust编写。https://firebirdsql.org/

它试图提供一个类似于Rusqlite https://github.com/rusqlite/rusqlite的接口。

支持的Firebird

支持Firebird 3.0+

代码示例

数据库连接

use firebirust::Connection;

let mut conn =
    Connection::connect("firebird://SYSDBA:masterkey@localhost/tmp/rust-firebird-test.fdb")
        .unwrap();

执行SQL语句

conn.execute_batch(
    r#"
    CREATE TABLE foo (
        a INTEGER NOT NULL,
        b VARCHAR(30) NOT NULL UNIQUE,
        c VARCHAR(1024),
        d DECIMAL(16,3) DEFAULT -0.123,
        e DATE DEFAULT '1967-08-11',
        f TIMESTAMP DEFAULT '1967-08-11 23:45:01',
        g TIME DEFAULT '23:45:01',
        h BLOB SUB_TYPE 1,
        i DOUBLE PRECISION DEFAULT 0.0,
        j FLOAT DEFAULT 0.0,
        PRIMARY KEY (a),
        CONSTRAINT CHECK_A CHECK (a <> 0)
    )
"#,
)
.unwrap();

执行带参数的SQL语句

conn.execute(
    "insert into foo(a, b, c, h) values (?, ?, ?, ?)",
    (1, "a", "b", "This is a pen"),
)
.unwrap();

conn.execute(
    "insert into foo(a, b, c, e, g, i, j) values (2, 'A', 'B', '1999-01-25', '00:00:01', 0.1, 0.1)",
    (), // empty list of parameters.
)
.unwrap();

conn.commit()

执行查询并获取结果

let mut stmt = conn.prepare("select * from foo").unwrap();
for row in stmt.query(()).unwrap() {
    let a:i32 = row.get(0).unwrap();
    println!("a={}", a);
}

执行查询并映射

use chrono::{NaiveDate, NaiveDateTime, NaiveTime};
use rust_decimal::Decimal;

#[derive(Debug)]
struct Foo {
    a: i32,
    b: String,
    c: String,
    d: Decimal,
    e: NaiveDate,
    f: NaiveDateTime,
    g: NaiveTime,
    h: Option<Vec<u8>>,
    i: f64,
    j: f32,
}

let mut stmt = conn.prepare("select * from foo where a=?").unwrap();
let foo_iter = stmt
    .query_map((1,), |row| {
        Ok(Foo {
            a: row.get(0).unwrap(),
            b: row.get(1).unwrap(),
            c: row.get(2).unwrap(),
            d: row.get(3).unwrap(),
            e: row.get(4).unwrap(),
            f: row.get(5).unwrap(),
            g: row.get(6).unwrap(),
            h: row.get(7).unwrap(),
            i: row.get(8).unwrap(),
            j: row.get(9).unwrap(),
        })
    })
    .unwrap();

for foo in foo_iter {
    println!("{:?}", foo);
}

在事务中执行

let mut trans = conn.transaction().unwrap();
trans.execute(
    "delete from foo where a in (1, 3)", ())
.unwrap();
trans.commit()

依赖

~9MB
~166K SLoC