rust调用SQLite实例

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
相关推荐
Python大数据分析@几秒前
python操作CSV和excel,如何来做?
开发语言·python·excel
上海_彭彭26 分钟前
【提效工具开发】Python功能模块执行和 SQL 执行 需求整理
开发语言·python·sql·测试工具·element
3345543234 分钟前
element动态表头合并表格
开发语言·javascript·ecmascript
沈询-阿里38 分钟前
java-智能识别车牌号_基于spring ai和开源国产大模型_qwen vl
java·开发语言
AaVictory.44 分钟前
Android 开发 Java中 list实现 按照时间格式 yyyy-MM-dd HH:mm 顺序
android·java·list
残月只会敲键盘1 小时前
面相小白的php反序列化漏洞原理剖析
开发语言·php
ac-er88881 小时前
PHP弱类型安全问题
开发语言·安全·php
ac-er88881 小时前
PHP网络爬虫常见的反爬策略
开发语言·爬虫·php
爱吃喵的鲤鱼1 小时前
linux进程的状态之环境变量
linux·运维·服务器·开发语言·c++
LuckyLay1 小时前
Spring学习笔记_27——@EnableLoadTimeWeaving
java·spring boot·spring