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

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

电机控制器电路板布局布线参考指导(七)电流检测模块布局布线

电机控制器电路板布局布线参考指导&#xff08;七&#xff09;电流检测模块布局布线 1.高侧电流检测2.低侧电流监测3.两相和三相电流检测4.关键元器件选型要求5.布局6.布线7.工具设置8.输入和输出滤波9.注意事项 很多电机驱动器产品系列包括内置了电流感测功能的器件&#xff0…

vue3中标签的ref属性

组合API-ref属性 在vue2.x中&#xff0c;可以通过给元素添加refxxx属性&#xff0c;然后在代码中通过this.$refs.xxx获取到对应的元素 然而在vue3中时没有$refs这个东西的&#xff0c;因此vue3中通过ref属性获取元素就不能按照vue2的方式来获取。 目标&#xff1a;掌握使用re…

LLM⊗KG范式下的知识图谱问答实现框架思想阅读

分享一张有趣的图&#xff0c;意思是在分类场景下&#xff0c;使用大模型和fasttext的效果&#xff0c;评论也很逗。 这其实背后的逻辑是&#xff0c;在类别众多的分类场景下&#xff0c;尤其是在标注数据量不缺的情况下&#xff0c;大模型的收益是否能够比有监督模型的收益更多…

Pytorch实现图片异常检测

图片异常检测 异常检测指的是在正常的图片中找到异常的数据&#xff0c;由于无法通过规则进行识别判断&#xff0c;这样的应用场景通常都是需要人工进行识别&#xff0c;比如残次品的识别&#xff0c;图片异常识别模型的目标是可以代替或者辅助人工进行识别异常图片。 AnoGAN…

4+1视图,注意区分类图与对象图

注意区分类图和对象图。对象图标记的是对象名&#xff0c;命名形式 对象名:类名&#xff0c;或者:类名。这里没有出现冒号&#xff0c;表示的是类图。 对象图(object diagram)。 对象图描述一组对象及它们之间的关系。对象图描述了在类图中所建立的事物实例的静态快照。和类图一…

表空间的概述

目录 表空间的属性 表空间的类型 永久性表空间(PermanentTablespace) 临时表空间(Temp Tablespace ) 撤销表空间(Undo Tablespace) 大文件表空间(BigfileTablespace) 表空间的状态 联机状态(Online) 读写状态(Read Write) 只读状态(Read) 脱机状态(Offline) Oracle从…

四川景源畅信:抖音个人开通橱窗操作流程介绍详情

随着短视频平台的快速发展&#xff0c;抖音已经成为越来越多人展示自我、分享生活的舞台。而其中&#xff0c;个人橱窗功能则为内容创作者提供了一个展示和销售商品的窗口。如果你是一位想要在抖音上开通个人橱窗的创作者或商家&#xff0c;了解详细的操作流程是迈向成功的第一…

iconfont_vue小程序中使用

1.前三步就是简单下载&#xff0c;详细可看这篇 vue管理系统导航中添加新的iconfont的图标-CSDN博客 2.引用有点区别&#xff1a;在App中引用 3.uni-icons写法 <uni-icons custom-prefix"iconfont" type"icon-zhengjian" size"23"></un…

博客网站SpringBoot+Vue项目练习

博客网站SpringBootVue简单案例 前言 学了vue后一直没用找到应用的机会&#xff0c;在Github上找到了一个看起来比较友好的项目&#xff08;其实具体代码我还没看过&#xff09;。而且这个项目作者的readme文档写的也算是比较好的了。 项目链接&#xff1a;https://github.c…

FX95GT FX505GT windows 11 触摸板安装

FX95GT FX505GT windows 11 触摸板驱动安装 如果正常使用 exe 文件安装不上&#xff0c;请在 ‘设置’ 》 ‘系统信息 ’》 驱动下载地址 如果正常使用 exe 文件安装不上&#xff0c;请在 ‘设置’ 》 ‘系统信息 ’》 高级系统设置 设备管理 在电脑上点右键&#xff0c;选择…

古墓丽影年度版喜加一 亚马逊免费游戏领取教程+下载安装教程

最近我们的老朋友亚马逊平台又为玩家们带来了一款免费的3A大作&#xff0c;这款游戏作为古墓丽影的续作在全球范围内都有着很高的热度和评价。但是许多玩家不知道这款游戏该如何领取&#xff0c;下面小编就为大家带来详细教程。 在领取之前&#xff0c;我们一定要优化我们的网…

npy文件如何追加数据?

.npy 文件是 NumPy 库用于存储数组数据的二进制格式&#xff0c;它包含一个描述数组结构的头部信息和实际的数据部分。直接追加数据到现有的 .npy 文件并不像文本文件那样直接&#xff0c;因为需要手动修改文件头部以反映新增数据后的数组尺寸&#xff0c;并且要确保数据正确地…