rusqlite库介绍
Rusqlite是一个用Rust编写的SQLite库,它提供了对SQLite数据库的操作功能。Rusqlite的设计目标是提供一个简洁易用的API,以便于Rust程序员能够方便地访问和操作SQLite数据库。
Rusqlite的主要特点包括:
- 遵循Rust的类型系统和所有权模型,提供安全的API设计;
- 支持异步和同步两种模式,以适应不同的应用场景;
- 提供丰富的功能,如数据库连接管理、事务处理、查询执行、数据绑定和结果集处理等;
- 支持自动重连机制,能够在网络中断或其他异常情况下自动恢复连接;
- 支持多种数据类型的转换,包括字符串、整数、浮点数、日期时间等;
- 提供详细的文档和示例代码,便于开发者快速上手和使用。
Rusqlite广泛应用于各种需要轻量级数据库支持的Rust项目中,例如Web应用程序、命令行工具、嵌入式设备等。此外,Rusqlite也经常与其他Rust库配合使用,以实现更复杂的功能和需求
下面是库使用案例
目录结构
cargo.toml配置文件
[package]
name = "mySQLite"
version = "0.1.0"
edition = "2021"[dependencies]
rusqlite = { version = "0.31.0", features = ["bundled"] }
[[example]]
name = "createSQLiteDatabase"
path = "examples/SQL/createSQLiteDatabase.rs"
doc-scrape-examples = true[package.metadata.example.createSQLiteDatabase]
name = "Create SQLite Database"
description = "demonstrates SQLite database create"
category = "SQL Rendering"
wasm = true
执行文件 createSQLiteDatabase.rs 内容
增删改查执行案例
use rusqlite::{Connection, Result};
use std::fs;
#[derive(Debug)]
struct Person {id: i32,name: String,data: Option<Vec<u8>>,
}pub fn main() -> Result<()> {let conn = establish_connection();// let conn = Connection::open_in_memory()?;// let conn = Connection::open("cats.db")?;conn.execute("CREATE TABLE person (id INTEGER PRIMARY KEY,name TEXT NOT NULL,data BLOB) ",(), // empty list of parameters.)?;let mut me = Person {id: 0,name: "Steven".to_string(),data: None,};conn.execute("INSERT INTO person (name, data) VALUES (?1, ?2)",(&me.name, &me.data),)?;let mut stmt = conn.prepare("SELECT id, name, data FROM person")?;let person_iter = stmt.query_map([], |row| {Ok(Person {id: row.get(0)?,name: row.get(1)?,data: row.get(2)?,})})?;for person in person_iter {println!("Found person {:?}", person.unwrap());}/*// 删除SQLite数据表let _res = conn.execute("DROP TABLE IF EXISTS person;", []);println!("{:?}", _res);*//*
// 删除数据
// 准备删除语句let mut statement = conn.prepare("DELETE FROM person")?;// 执行删除操作statement.execute(())?;*//*// 删除数据
// 准备删除语句let mut statement = conn.prepare("DELETE FROM person WHERE id =1")?;// 执行删除操作statement.execute(())?;*/// 准备一个SQL更新语句//更新数据let p = Person{id: 1,name: "Server".to_string(),data: None,};let mut update_stmt =conn.prepare("UPDATE person SET name = ?1 WHERE id = ?2").unwrap();update_stmt.execute((p.name,p.id)).unwrap();println!("{:?}", update_stmt);/*let result = conn.execute("UPDATE person SET name = ?1 WHERE id = ?2",( p.name, p.id),)?;println!("{:?}", result);*////删除SQLite数据库,库必须是被关闭状态才行if fs::metadata("cats.db").is_ok() {// 删除数据库文件fs::remove_file("cats.db").expect("删除数据库文件失败");}selectTable(&conn, "NewName");Ok(())
}
//获取并返回SQL连接
fn establish_connection() -> rusqlite::Connection {// 创建一个内存中的SQLite数据库连接match rusqlite::Connection::open_in_memory() {Ok(conn) => conn,Err(e) => panic!("Failed to open a connection: {:?}", e),}
}
//接收SQL连接执行
fn selectTable(conn: &rusqlite::Connection, name: &str) ->Result<()>{// let conn = establish_connection();let mut stmt = conn.prepare("SELECT id, name, data FROM person")?;let person_iter = stmt.query_map([], |row| {Ok(Person {id: row.get(0)?,name: row.get(1)?,data: row.get(2)?,})})?;for person in person_iter {println!("Found person {:?}", person.unwrap());}Ok(())
}
代码执行方式
cargo run --example createSQLiteDatabase