mirror of
https://github.com/isar/rusqlite.git
synced 2025-10-27 03:48:55 +08:00
30733a36885602931889da2779a4ed09f7656fe2
This means Rows no longer implements Iterator, but it is no longer possible to misuse it by accessing a stale Row handle.
Rusqlite
Rusqlite is an ergonomic wrapper for using SQLite from Rust. It attempts to expose an interface similar to rust-postgres. View the full API documentation.
extern crate rusqlite;
extern crate time;
use time::Timespec;
use rusqlite::Connection;
#[derive(Debug)]
struct Person {
id: i32,
name: String,
time_created: Timespec,
data: Option<Vec<u8>>
}
fn main() {
let conn = Connection::open_in_memory().unwrap();
conn.execute("CREATE TABLE person (
id INTEGER PRIMARY KEY,
name TEXT NOT NULL,
time_created TEXT NOT NULL,
data BLOB
)", &[]).unwrap();
let me = Person {
id: 0,
name: "Steven".to_string(),
time_created: time::get_time(),
data: None
};
conn.execute("INSERT INTO person (name, time_created, data)
VALUES ($1, $2, $3)",
&[&me.name, &me.time_created, &me.data]).unwrap();
let mut stmt = conn.prepare("SELECT id, name, time_created, data FROM person").unwrap();
let mut person_iter = stmt.query_map(&[], |row| {
Person {
id: row.get(0),
name: row.get(1),
time_created: row.get(2),
data: row.get(3)
}
}).unwrap();
for person in person_iter {
println!("Found person {:?}", person.unwrap());
}
}
Optional Features
Rusqlite provides several features that are behind Cargo features. They are:
load_extensionallows loading dynamic library-based SQLite extensions.backupallows use of SQLite's online backup API.functionsallows you to load Rust closures into SQLite connections for use in queries.traceallows hooks into SQLite's tracing and profiling APIs.blobgivesstd::io::{Read, Write, Seek}access to SQL BLOBs.
Author
John Gallagher, johnkgallagher@gmail.com
License
Rusqlite is available under the MIT license. See the LICENSE file for more info.
Languages
Rust
99.5%
Shell
0.5%