rust调用SQLite实例

news2024/12/23 5:00:12

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1647019.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Mysql数据在磁盘上的存储结构

一. 前言 一行数据的存储格式大致如下所示: 变长字段的长度列表&#xff0c;null值列表&#xff0c;数据头&#xff0c;column01的值&#xff0c;column02的值&#xff0c;column0n的值… 二. 变长字段 在MySQL里有一些字段的长度是变长的&#xff0c;是不固定的&#xff0c;…

21_Scala集合_可变数组ArrayBuffer

文章目录 ArrayBuffer1.创建可变数组ArrayBuffer2.增加数据3.删除数据4.修改数据5.查询数据Appendix ArrayBuffer ArrayBuffer可变数组–感觉优点类似于Java的ArrayList 1.创建可变数组ArrayBuffer –请注意下面的mutable import scala.collection.mutable.ArrayBuffer //m…

在Linux上使用Selenium驱动Chrome浏览器无头模式

大家好&#xff0c;我们平时在做UI自动化测试的时候&#xff0c;经常会用到Chrome浏览器的无头模式&#xff08;无界面模式&#xff09;&#xff0c;并且将测试代码部署到Linux系统中执行&#xff0c;或者平时我们写个爬虫爬取网站的数据也会使用到&#xff0c;接下来和大家分享…

前端框架 Vue 主要用来做什么的?

Vue.js 是一个流行的前端框架&#xff0c;主要用于构建交互式的用户界面。它的设计目标是通过简单的 API 提供高效的数据驱动视图层。Vue 具有响应式数据绑定和组件化的特性&#xff0c;使得开发者可以轻松地构建复杂的单页面应用 (SPA) 和动态网页。 1. 数据驱动视图 Vue 的…

IIS部署vue项目 IIS重写URL

【第一步】安装IIS {1&#xff09;打开控制面板 -> 打开程序和功能 -> 打开启用或关闭windows功能 &#xff08;2&#xff09;找到 Internet Information Services 勾选【web管理工具】和【万维网服务】&#xff0c;然后 确定 【第二步】安装URL重写模块 1). 安装URL …

企业微信hook接口协议,ipad协议http,设置是否自动同意

设置是否自动同意 参数名必选类型说明uuid是String每个实例的唯一标识&#xff0c;根据uuid操作具体企业微信 请求示例 {"uuid":"bc4800492083fdec4c1a7e5c94","state":1 //1 是需要验证同意&#xff08;需要手动点击同意&#xff09; 0关闭验证…

下一代自动化,国外厂商如何通过生成性AI重塑RPA?

企业自动化的未来趋势是什么&#xff1f;科技巨头们普遍认为&#xff0c;由生成性AI驱动的AI Agent将成为下一个重大发展方向。尽管“AI Agent”这一术语尚无统一定义&#xff0c;但它通常指的是那些能够根据指令通过模拟人类互动&#xff0c;在软件和网络平台上执行复杂任务的…

Skywalking的重要功能详解

学习本篇文章之前首先要了解一下Sky walking的基础知识 分布式链路追踪工具Sky walking详解 一&#xff0c;Sky walking监控数据库 在admin服务中&#xff0c;连接数据库查询user表中所有数据 引入依赖 <dependency><groupId>mysql</groupId><artifactI…

分享几个.NET开源的AI和LLM相关项目框架

前言 现如今人工智能&#xff08;AI&#xff09;技术的发展可谓是如火如荼&#xff0c;它们在各个领域都展现出了巨大的潜力和影响力。今天大姚给大家分享4个.NET开源的AI和LLM相关的项目框架&#xff0c;希望能为大家提供一些参考。如果你有更好的推荐&#xff0c;欢迎RP投稿或…

YOLOv5入门(四)训练自己的目标检测模型

前言 通过前面几篇文章&#xff0c;已经完成数据集制作和环境配置&#xff08;服务器&#xff09;&#xff0c;接下来将继续实践如何开始训练自己数据集~ 往期回顾 YOLOv5入门&#xff08;一&#xff09;利用Labelimg标注自己数据集 YOLOv5入门&#xff08;二&#xff09;处…

Oceanbase all-in-one单机版部署,通过MySQL客户端连接OB租户,DBEAVER 客户端连接MySQL租户。

一.Oceanbase all-in-one单机版部署 1.修改资源限制。 vim /etc/security/limits.conf root soft nofile 655350 root hard nofile 655350 * soft nofile 655350 * hard nofile 655350 * soft stack unlimited * hard stack unlimited * soft nproc 655360 * hard nproc 6553…

webstorm 常用插件

安装插件步骤&#xff1a; 打开软件&#xff0c;文件 -- 设置-- 插件 -- 输入插件名称 -- 安装 代码截图: code screenShots 先选中代码&#xff0c;按 ctrl shift alt a&#xff0c;就可截取选中的代码颜色注释: comments highlighter 对注释的文字改变颜色高亮成对符号: h…

RK3568 学习笔记 : 精简 u-boot env 默认复杂的多种引导启动设置

前言 环境&#xff1a; 正点原子 Atompi-CA1 RK3568 开发板、正点原子 DLRK3568 开发板&#xff0c;&#xff08;一时脑热买了两块 RK3568 开发板&#xff09;&#xff0c;Atompi-CA1 RK3568 开发板比较小巧&#xff0c;利于一些前期的嵌入式 Linux 开发学习与实践。 RK3568 开…

分享5款PDF编辑软件

PDF编辑不易&#xff0c;有需要的朋友可以试试这5款专业软件&#xff0c;每一个都能直接在PDF文件上编辑&#xff0c;不同的软件对PDF可编辑的范围不同&#xff0c;大家可以按需求选用。 1.edge浏览器 Edge浏览器不仅是浏览网页的得力助手&#xff0c;还悄然成为了轻量级PDF管…

【强训笔记】day11

NO.1 思路&#xff1a;枚举&#xff0c;设一号大礼包的数量为x&#xff0c;二号大礼包的数量为y&#xff0c;用循环枚举一号大礼包的个数得到二号大礼包的数量&#xff0c;使得某一时刻axby的值最大。 代码实现&#xff1a; #include<iostream>using namespace std;lo…

财务世界中数据叙事对于企业决策的影响力

数据叙事是财务规划与分析中一项能够改变企业管理规则、体现数据差异化的技能。它使得财务专业人士能够在企业高层的决策桌上获得一席之地。财务团队可以利用这项出色且无与伦比的技能将数据转化为可操作的业务建议。在当今这个数字化时代&#xff0c;任何值得分享的见解都可以…

在.NET架构的Winform项目中引入“异步编程”思想和技术

在.NET架构的Winform项目中引入“异步编程”思想和技术 一、异步编程引入&#xff08;1&#xff09;异步编程引入背景&#xff08;2&#xff09;异步编程程序控制流图&#xff08;3&#xff09;异步编程前置知识&#xff1a; 二、异步编程demo步骤1&#xff1a;步骤2&#xff1…

『FPGA通信接口』DDR(4)DDR3内存条SODIMMs读写测试

文章目录 前言1.MIG IP核配置2.测试程序3.DDR应用4.传送门 前言 不论是DDR3颗粒还是DDR3内存条&#xff0c;xilinx都是通过MIG IP核实现FPGA与DDR的读写。本文区别于DDR颗粒&#xff0c;记录几个与颗粒配置不同的地方。关于DDR的原理与MIG IP的简介&#xff0c;请查看前面文章&…

商务分析方法与工具(三):Python的趣味快捷-循环控制结构解决随机摇奖

Tips&#xff1a;"分享是快乐的源泉&#x1f4a7;&#xff0c;在我的博客里&#xff0c;不仅有知识的海洋&#x1f30a;&#xff0c;还有满满的正能量加持&#x1f4aa;&#xff0c;快来和我一起分享这份快乐吧&#x1f60a;&#xff01; 喜欢我的博客的话&#xff0c;记得…

Debian 12 Bookworm Linux安装 NVIDIA驱动程序

运行带有 Nvidia 显卡的 Debian 12 Linux 台式机或笔记本电脑的用户将需要 Nvidia 驱动程序才能利用显卡的强大功能来执行游戏、3D 渲染、视频编辑和其他图形密集型任务。 因此&#xff0c;如果你不知道如何在 Debian Linux 上安装 NVIDIA GPU 驱动程序&#xff0c;请按照本教…