Struct rusqlite::SqliteConnection
[−]
[src]
pub struct SqliteConnection { // some fields omitted }
A connection to a SQLite database.
Warning
Note that despite the fact that most SqliteConnection
methods take an immutable reference to
self
, SqliteConnection
is NOT threadsafe, and using it from multiple threads may result in
runtime panics or data races. The SQLite connection handle has at least two pieces of internal
state (the last insertion ID and the last error message) that rusqlite uses, but wrapping these
APIs in a safe way from Rust would be too restrictive (for example, you would not be able to
prepare multiple statements at the same time).
Methods
impl SqliteConnection
fn open<P: AsRef<Path>>(path: &P) -> SqliteResult<SqliteConnection>
Open a new connection to a SQLite database.
SqliteConnection::open(path)
is equivalent to SqliteConnection::open_with_flags(path, SQLITE_OPEN_READ_WRITE | SQLITE_OPEN_CREATE)
.
fn open_in_memory() -> SqliteResult<SqliteConnection>
Open a new connection to an in-memory SQLite database.
fn open_with_flags<P: AsRef<Path>>(path: &P, flags: SqliteOpenFlags) -> SqliteResult<SqliteConnection>
Open a new connection to a SQLite database.
Database Connection](http://www.sqlite.org/c3ref/open.html) for a description of valid flag combinations.
fn open_in_memory_with_flags(flags: SqliteOpenFlags) -> SqliteResult<SqliteConnection>
Open a new connection to an in-memory SQLite database.
Database Connection](http://www.sqlite.org/c3ref/open.html) for a description of valid flag combinations.
fn transaction<'a>(&'a self) -> SqliteResult<SqliteTransaction<'a>>
Begin a new transaction with the default behavior (DEFERRED).
The transaction defaults to rolling back when it is dropped. If you want the transaction to
commit, you must call commit
or set_commit
.
Example
fn perform_queries(conn: &SqliteConnection) -> SqliteResult<()> { let tx = try!(conn.transaction()); try!(do_queries_part_1(conn)); // tx causes rollback if this fails try!(do_queries_part_2(conn)); // tx causes rollback if this fails tx.commit() }
fn transaction_with_behavior<'a>(&'a self, behavior: SqliteTransactionBehavior) -> SqliteResult<SqliteTransaction<'a>>
Begin a new transaction with a specified behavior.
See transaction
.
fn execute_batch(&self, sql: &str) -> SqliteResult<()>
Convenience method to run multiple SQL statements (that cannot take any parameters).
Uses sqlite3_exec under the hood.
Example
fn create_tables(conn: &SqliteConnection) -> SqliteResult<()> { conn.execute_batch("BEGIN; CREATE TABLE foo(x INTEGER); CREATE TABLE bar(y TEXT); COMMIT;") }
fn execute(&self, sql: &str, params: &[&ToSql]) -> SqliteResult<c_int>
Convenience method to prepare and execute a single SQL statement.
On success, returns the number of rows that were changed or inserted or deleted (via
sqlite3_changes
).
Example
fn update_rows(conn: &SqliteConnection) { match conn.execute("UPDATE foo SET bar = 'baz' WHERE qux = ?", &[&1i32]) { Ok(updated) => println!("{} rows were updated", updated), Err(err) => println!("update failed: {}", err), } }
fn last_insert_rowid(&self) -> i64
Get the SQLite rowid of the most recent successful INSERT.
Uses sqlite3_last_insert_rowid under the hood.
fn query_row<T, F>(&self, sql: &str, params: &[&ToSql], f: F) -> SqliteResult<T> where F: FnOnce(SqliteRow) -> T
Convenience method to execute a query that is expected to return a single row.
Example
fn preferred_locale(conn: &SqliteConnection) -> SqliteResult<String> { conn.query_row("SELECT value FROM preferences WHERE name='locale'", &[], |row| { row.get(0) }) }
If the query returns more than one row, all rows except the first are ignored.
fn query_row_safe<T, F>(&self, sql: &str, params: &[&ToSql], f: F) -> SqliteResult<T> where F: FnOnce(SqliteRow) -> T
Convenience method to execute a query that is expected to return a single row.
Example
fn preferred_locale(conn: &SqliteConnection) -> SqliteResult<String> { conn.query_row_safe("SELECT value FROM preferences WHERE name='locale'", &[], |row| { row.get(0) }) }
If the query returns more than one row, all rows except the first are ignored.
Deprecated
This method should be considered deprecated. Use query_row
instead, which now
does exactly the same thing.
fn prepare<'a>(&'a self, sql: &str) -> SqliteResult<SqliteStatement<'a>>
Prepare a SQL statement for execution.
Example
fn insert_new_people(conn: &SqliteConnection) -> SqliteResult<()> { let mut stmt = try!(conn.prepare("INSERT INTO People (name) VALUES (?)")); try!(stmt.execute(&[&"Joe Smith"])); try!(stmt.execute(&[&"Bob Jones"])); Ok(()) }
fn close(self) -> SqliteResult<()>
Close the SQLite connection.
This is functionally equivalent to the Drop
implementation for SqliteConnection
except
that it returns any error encountered to the caller.