使用Rusqlite操作sqlite数据库

本文介绍了一个使用Rust编程语言和rusqlite库实现的简单SQLite数据库操作示例。包括创建数据库表、检查表是否存在、插入数据、查询数据等功能。通过这个示例,读者可以了解到如何在Rust中进行基本的数据库操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

[dependencies]
rusqlite = "0.22.0"
use rusqlite::{params, Connection, Result};

#[derive(Debug)]
struct Person {
    id: i32,
    name: String,
}

fn main() {
    let con = Connection::open_in_memory().unwrap();

    let flag1 = check_table_existed("table_1", &con);

    if !flag1 {
        create_table(&con);
    }

    if !check_person_existed("Tester1", &con) {
        insert_person("Tester1", &con);
    }

    if !check_person_existed("Tester2", &con) {
        insert_person("Tester2", &con);
    }

    list_persons(&con);

    match con.close(){
        Ok(v) => v,
        Err(e) => panic!("{:?}", e),
    };
}

fn check_table_existed(table_name : &str, con : &Connection) -> bool {
    let sql: &str = "SELECT COUNT(`name`) FROM `sqlite_master` WHERE `type` = 'table' AND `name` = ?";
    let mut stmt = con.prepare(sql).unwrap();
    let rs = stmt.query_row(params![table_name], |row | {
        return row.get(0) as Result<i32>;
    });

    let count = rs.unwrap();

    return count > 0;
}

fn create_table(con : &Connection) {
    let sql : &str = "CREATE TABLE IF NOT EXISTS `table_1`(`Id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `Name` TEXT NOT NULL)";
    match con.execute(sql, params![]) {
        Ok(o) => o,
        Err(e) => panic!("{:?}", e),
    };
}

fn check_person_existed(person: &str, con: &Connection) -> bool {
    let sql: &str = "SELECT COUNT(`Id`) FROM `table_1` WHERE `Name` = ?";
    let mut stmt = con.prepare(sql).unwrap();
    let rs = stmt.query_row(params![person], |row|{
        row.get(0) as Result<i32>
    });
    let count = rs.unwrap();
    return count > 0;
}

fn insert_person(person: &str, con: &Connection) {
    let sql: &str = "INSERT INTO `table_1`(`Name`) VALUES (?)";
    match con.execute(sql, params![person]) {
        Ok(o) => o,
        Err(e) => panic!("{:?}", e),
    };
}

fn list_persons(con : &Connection){
    let sql:&str = "SELECT * FROM `table_1`";
    let mut stmt = con.prepare(sql).unwrap();
    let person_iterator = stmt.query_map(params![], |row| {
        Ok(Person{
            id: row.get(0).unwrap(),
            name: row.get(1).unwrap(),
        })
    }).unwrap();

    for p in person_iterator {
        println!("{:?}", p.unwrap());
    }
}

 

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值