mirror of
https://github.com/isar/rusqlite.git
synced 2025-11-21 07:19:24 +08:00
2c58b3f804b4cee76a3b21a1be7ce18270da54f8
libc
Recent versions of bindgen use `std::os::raw` over `libc`, but currently `libsqlite3-sys` is overriding that. `std::os::raw` is a subset of `libc` that exports only the relevant type definitions, but not any functions which require additional linking. This enables `libsqlite3-sys` to be more easily used on targets that may not have a libc available (presumably sqlite itself would have been compiled with musl in that case)
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 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());
}
}
Supported SQLite Versions
The base rusqlite package supports SQLite version 3.6.8 or newer. If you need
support for older versions, please file an issue. Some cargo features require a
newer SQLite version; see details below.
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. Note: This feature requires SQLite 3.6.11 or later.functionsallows you to load Rust closures into SQLite connections for use in queries. Note: This feature requires SQLite 3.7.3 or later.traceallows hooks into SQLite's tracing and profiling APIs. Note: This feature requires SQLite 3.6.23 or later.blobgivesstd::io::{Read, Write, Seek}access to SQL BLOBs. Note: This feature requires SQLite 3.7.4 or later.limitsallows you to set and retrieve SQLite's per connection limits.chronoimplementsFromSqlandToSqlfor various types from thechronocrate.serde_jsonimplementsFromSqlandToSqlfor theValuetype from theserde_jsoncrate.bundleduses a bundled version of sqlite3. This is a good option for cases where linking to sqlite3 is complicated, such as Windows.
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%