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