Rust 语言使用 SQLite 数据库

news/2024/12/4 16:37:55/

SQLite 是一种广泛使用的轻量级数据库,它通过简单的文件来承载数据,无需复杂的服务器配置。正因如此,它成为了许多桌面和移动应用的首选数据库。在 Rust 生态中,rusqlite 库为开发者提供了操作 SQLite 数据库的简洁且有效的方法。本文将全面介绍如何利用 rusqlite 在 Rust 中进行数据库操作。

起步安装

在开始之前,我们需要将 rusqlite 引入到你的 Rust 项目中。首先,在项目的 Cargo.toml 文件下的 [dependencies] 部分添加 rusqlite

[dependencies]
rusqlite = "0.25.3"

完成添加后,执行 cargo build 来下载和编译 rusqlite 库及其依赖。

打开和创建数据库

要操作一个 SQLite 数据库,首先需要创建一个连接。rusqlite 提供了 Connection 对象来实现这一点。以下示例展示如何打开一个存在的数据库文件或创建一个新的数据库文件:

rust">use rusqlite::{Connection, Result};fn main() -> Result<()> {let conn = Connection::open("my_database.db")?;// 接下来,你可以使用 `conn` 来进行数据库操作// ...Ok(())
}

创建表

有了 Connection 对象,我们就可以开始创建数据表:

rust">use rusqlite::{params, Connection, Result};fn main() -> Result<()> {let conn = Connection::open("my_database.db")?;conn.execute("CREATE TABLE if not exists person (id INTEGER PRIMARY KEY,name TEXT NOT NULL,age INTEGER)",params![],)?;Ok(())
}

在上述代码中,我们创建了一个简单的 person 表,包含 idnameage 三个字段。

插入数据

插入数据是数据库操作的基础。在 rusqlite 中,插入数据可以通过 execute 方法实现:

rust">fn main() -> Result<()> {let conn = Connection::open("my_database.db")?;conn.execute("INSERT INTO person (name, age) VALUES (?1, ?2)",params!["Alice", 32],)?;Ok(())
}

查询数据

查询数据可以通过 query_map 方法来进行,它允许我们映射查询结果到 Rust 的结构体中:

rust">use rusqlite::{params, Connection, Result, NO_PARAMS};#[derive(Debug)]
struct Person {id: i32,name: String,age: i32,
}fn main() -> Result<()> {let conn = Connection::open("my_database.db")?;let mut stmt = conn.prepare("SELECT id, name, age FROM person WHERE age > ?")?;let person_iter = stmt.query_map(params![20], |row| {Ok(Person {id: row.get(0)?,name: row.get(1)?,age: row.get(2)?,})})?;for person in person_iter {println!("Found person: {:?}", person?);}Ok(())
}

更新和删除数据

数据的更新和删除也是通过 execute 方法来完成的。下面展示如何对数据进行更新和删除:

rust">fn main() -> Result<()> {let conn = Connection::open("my_database.db")?;// 更新数据conn.execute("UPDATE person SET age = ? WHERE id = ?",params![60, 1],)?;// 删除数据conn.execute("DELETE FROM person WHERE id = ?",params![1],)?;Ok(())
}

事务处理

使用 rusqlite 进行事务处理可以确保数据的一致性和完整性。transaction 方法可以用来包裹一系列数据库操作,确保它们要么全部成功,要么全部失败无效。下面的示例展示了如何使用事务:

rust">use rusqlite::Connection;fn main() {let conn = Connection::open("my_database.db").unwrap();// 开启事务let tx = conn.transaction().unwrap();// 执行一系列数据库操作tx.execute("INSERT INTO person (name, age) VALUES (?1, ?2)", &["Bob", 45]).unwrap();tx.execute("UPDATE person SET age = age + 1 WHERE name = ?1", &["Alice"]).unwrap();// 如果所有操作都成功,提交事务tx.commit().unwrap();
}

结束语

rusqlite 是 Rust 中操作 SQLite 数据库的一个强大工具,它通过安全且符合 Rust 风格的接口,极大程度地简化了数据库的操作。应用 rusqlite,你可以专注于业务逻辑的构建,而不必担心底层 SQL 的繁琐。通过本文的介绍,我希望你能够对如何使用 rusqlite 有个清晰的认识,并能够在你自己的项目中愉快地使用它。


http://www.ppmy.cn/news/1424514.html

相关文章

Python 编程必备技能:解包。简化代码,提高效率

在 Python 中&#xff0c;解包&#xff08;Unpacking&#xff09;是指将一个序列&#xff08;列表、元组等&#xff09;或字典中的元素解开&#xff0c;分别赋值给多个变量的过程。解包可以方便地将序列或字典中的元素分别取出来&#xff0c;用于后续的处理和操作。 在 Python…

深入了解MindOpt优化求解器的License服务

在商业和研究领域&#xff0c;高效的数学优化求解器是解决复杂问题的关键工具。MindOpt求解器以其卓越的性能和广泛的应用场景成为众多专业人士的首选。但在享受其强大功能的同时&#xff0c;了解和选择合适的License服务是至关重要的。本篇博客将详细介绍MindOpt优化求解器的L…

python/pygame 挑战魂斗罗 笔记(二)

一、建立地面碰撞体&#xff1a; 现在主角Bill能够站立在游戏地图的地面&#xff0c;是因为我们初始化的时候把Bill的位置固定了self.rect.y 250。而不是真正的站在地图的地面上。 背景地图是一个完整的地图&#xff0c;没有地面、台阶的概念&#xff0c;就无法通过碰撞检测来…

MacOs 安装thrift-0.5.0

下载thrift-0.5.0.tar.gz https://archive.apache.org/dist/incubator/thrift/0.5.0-incubating/ 安装thrift 解压&#xff1a;tar -zvxf thrift-0.5.0.tar.gz 进入解压目录&#xff1a;cd thrift-0.5.0 编译命令&#xff1a;./configure --prefix/usr/local/ --with-boo…

Hadoop 3.1.3

第1章 Hadoop概述 1.1 Hadoop是什么 1.2 Hadoop发展历史&#xff08;了解&#xff09; 1.3 Hadoop三大发行版本&#xff08;了解&#xff09; Hadoop三大发行版本&#xff1a;Apache、Cloudera、Hortonworks。 Apache版本最原始&#xff08;最基础&#xff09;的版本&#x…

Rust 构建跨平台 GUI 的新选择

在现代软件开发过程中&#xff0c;用户界面&#xff08;GUI&#xff09;的设计与实现是不可或缺的一环。随着Rust编程语言的崛起&#xff0c;其安全性、性能和并发特性使其成为开发高质量GUI应用的理想选择。relm框架&#xff0c;作为Rust生态中的一员&#xff0c;提供了一种声…

51单片机学习笔记——点亮数码管、模块化编程

工作原理图 138译码器 G1、G2A、G2B为138译码器的使能端 P22、P23、P24为输入口控制Y0-Y7的动作&#xff0c;以二进制的算法 具体如下&#xff1a; P22 P23 P24 0 0 0 Y0为1其余为0 0 0 1 Y1为1其余为0 0 1 0 Y2…

解决mac本git安装后找不到命令的问题

不熟悉mac配置&#xff0c;折腾了半天&#xff0c;记录一下。 1.问题描述2.解决方法 1.问题描述 从https://sourceforge.net/projects/git-osx-installer/files/下载的git安装包&#xff1a; 安装时提示&#xff1a; 这里的解决办法是按住control键再打开文件安装。 安装完…