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.mzph.cn/web/11246.shtml

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

相关文章

SQL_hive的连续开窗函数

SQL三种排序&#xff08;开窗&#xff09;第几名/前几名/topN 1三种排序&#xff08;开窗&#xff09;第几名/前几名/topN思路 4种排序开窗函数 1三种排序&#xff08;开窗&#xff09;第几名/前几名/topN 求每个学生成绩第二高的科目-排序思路 t2表&#xff1a;对每个学生 的…

基于Python的web漏洞挖掘扫描技术的实现与研究【附源码,文档】

博主介绍&#xff1a;✌Java老徐、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;&…

Vue3 项目

创建 Vue3 项目的步骤如下&#xff1a; 安装 Node.js Vue3 需要依赖 Node.js 环境&#xff0c;因此需要先安装 Node.js。可以从官网下载 Node.js 的安装包并安装&#xff0c;也可以使用包管理器安装&#xff0c;例如在 Ubuntu 上可以使用以下命令安装&#xff1a; sudo apt-get…

C语言笔记13

字符数组与字符串常量区别 #include <stdio.h> int main() {char str1[] "hello bit.";char str2[] "hello bit.";char *str3 "hello bit.";char *str4 "hello bit.";if(str1 str2)printf("str1 and str2 are same\n…

【生信技能树】拿到表达矩阵之后,如何使用ggplot2绘图系统绘制箱线图?

拿到表达矩阵之后&#xff0c;如何使用ggplot2绘图系统绘制箱线图&#xff1f; 目录 预备知识 绘制箱线图示例 预备知识 1.pivot_longer函数 pivot_longer 是tidyr包中的一个函数&#xff0c;用于将数据框&#xff08;data frame&#xff09;从宽格式转换为长格式。在宽格…

一文掌握gRPC

文章目录 1. gRPC简介2. Http2.0协议3. 序列化-Protobuf4. gRPC开发实战环境搭建5. gRPC的四种通信方式&#xff08;重点&#xff09;6. gRPC的代理方式7. SprintBoot整合gRPC 1. gRPC简介 gRPC是由google开源的高性能的RPC框架。它是由google的Stubby这样一个内部的RPC框架演…

reactJs动态执行js代码

参考了这篇文章 js——new Function 一个可以随时动态执行字符串js代码的神器 因为一些原因&#xff0c;想要js代码块配置在数据库中返回&#xff0c;例如时间&#xff0c;我需要用到第三方库 moment。然后动态的得到startDate 和 endDate 配置在数据库中的startDate值是$mom…

Java日志总结

开发中&#xff0c;日志记录是不可或缺的一部分&#xff0c;应用日志的记录主要用于&#xff1a;记录操作轨迹数据、监控系统运行情况、系统故障定位问题&#xff0c;日志的重要性不言而喻&#xff0c;想要快速定位问题&#xff0c;日志分析是个重要的手段&#xff0c;Java也提…

JAVA 集合(单列集合)

集合框架 1.集合的特点 a.只能存储引用数据类型的数据 b.长度可变 c.集合中有大量的方法,方便我们操作 2.分类: a.单列集合:一个元素就一个组成部分: list.add(“张三”) b.双列集合:一个元素有两部分构成: key 和 value map.put(“涛哥”,“金莲”) -> key,value叫做键值…

Docker各版本的新特性

Docker 作为流行的容器化平台&#xff0c;会定期发布新版本以引入新特性、改进和修复。根据提供的搜索结果&#xff0c;以下是一些 Docker 版本及其新特性的概览&#xff1a; Docker Desktop v4.12 Containerd 的集成&#xff1a;更深入集成 containerd 以管理容器生命周期&a…

锁和MVCC如何实现mysql的隔离级别

概述 MVCC解决读的隔离性&#xff0c;加锁解决写的隔离性。 读未提交 读未提交&#xff0c;更新数据大概率使用的是独享锁吧。 读已提交 在 Read Committed&#xff08;读已提交&#xff09;隔离级别下&#xff0c;每次执行读操作时都会生成一个新的 read view。这是因为在读…

英译汉早操练-(二十)

hello大家好&#xff0c;这篇跟随十九&#xff0c;继续真题学习。如果想看全部请返回到第十九篇。 英译汉早操练-&#xff08;十九&#xff09;-CSDN博客 The political upheaval in Libya and elsewhere in North Africa has opened the way for thousands of new migrants to…

【C++学习第15天】STL

一、种类 vector&#xff1a;变长数组&#xff0c;倍增的思想。给数组申请空间所耗费的时间取决于申请次数&#xff0c;而不是申请空间的大小&#xff0c;即a[1]和a[10000]两个数组的申请时间是基本一致的。pair<int, string>&#xff1a;存储一个二元组&#xff0c;前后…

AI 图像生成-环境配置

一、python环境安装 Windows安装Python&#xff08;图解&#xff09; 二、CUDA安装 CUDA安装教程&#xff08;超详细&#xff09;-CSDN博客 三、Git安装 git安装教程&#xff08;详细版本&#xff09;-CSDN博客 四、启动器安装 这里安装的是秋叶aaaki的安装包 【AI绘画…

【GlobalMapper精品教程】081:WGS84/CGCS2000转Lambert投影

参考阅读:ArcGIS实验教程——实验十:矢量数据投影变换 文章目录 一、加载实验数据二、设置输出坐标系三、数据导出一、加载实验数据 打开配套案例数据包中的data081.rar中的矢量数据,如下所示: 查看源坐标系:双击图层的,图层投影选项卡,数据的已有坐标系为WGS84地理坐标…

MySQL创建存储过程函数

DDL CREATE TABLE student (id int(11) NOT NULL AUTO_INCREMENT COMMENT 学号,createDate datetime DEFAULT NULL,userName varchar(20) DEFAULT NULL,pwd varchar(36) DEFAULT NULL,phone varchar(11) DEFAULT NULL,age tinyint(3) unsigned DEFAULT NULL,sex char(2) DEFAU…

[初学rust] 05_ rust struct

rust struct 其实这也算复合类型&#xff0c;但是其他语言都有&#xff0c;所以抽取出来单独看的时候会很简单&#xff0c;更容易学 1. 定义结构体 结构体的定义和其他语言没啥区别。 struct User {name: String,age: i32, }2. 创建实例 创建实例的过程就跟js类似 let us…

【3dmax笔记】021:对齐工具(快速对齐、法线对齐、对齐摄影机)

文章目录 一、对齐二、快速对齐三、法线对齐四、对齐摄影机五、注意事项3dmax提供了对齐、快速对齐、法线对齐和对齐摄像机等对齐工具: 对齐工具选项: 下面进行一一讲解。 一、对齐 快捷键为Alt+A,将当前选择对象与目标对象进行对齐。 最大对最大:

【小笔记】neo4j用load csv指令导入数据

【小笔记】neo4j用load csv指令导入数据 背景 很久没有用load CSV的方式导入过数据了因为它每次导入有数量限制&#xff08;印象中是1K还是1W&#xff09;&#xff0c;在企业中构建的图谱往往都是大规模的&#xff0c;此时通常采用的是Neo4j-admin import方式。最近遇到了一些…

振弦式表面应变计怎么安装

振弦式表面应变计是一种用于测量结构表面应变的高精度传感器&#xff0c;广泛应用于工程和科研领域。正确安装振弦式表面应变计对于确保测量结果的准确性至关重要。以下是安装振弦式表面应变计的步骤和注意事项&#xff1a; 1. 准备工作 在开始安装前&#xff0c;需要准备以下工…