sql.md 1.3 KB

use rusqlite::{Connection, Result};

fn main() -> Result<()> {
    // 打开第一个数据库连接
    let conn1 = Connection::open("database1.db")?;

    // 打开第二个数据库连接
    let conn2 = Connection::open("database2.db")?;

    // 在第一个数据库中创建一个表
    conn1.execute(
        "CREATE TABLE IF NOT EXISTS database1_table (id INTEGER PRIMARY KEY, name TEXT)",
        [],
    )?;

    // 在第二个数据库中创建一个表
    conn2.execute(
        "CREATE TABLE IF NOT EXISTS database2_table (id INTEGER PRIMARY KEY, age INTEGER)",
        [],
    )?;

    // 在第一个数据库中插入一些数据
    conn1.execute("INSERT INTO database1_table (id, name) VALUES (1, 'John')", [])?;

    // 在第二个数据库中插入一些数据
    conn2.execute("INSERT INTO database2_table (id, age) VALUES (1, 25)", [])?;

    // 跨数据库查询
    let query = "SELECT d1.name, d2.age FROM database1.db.database1_table AS d1
                 JOIN database2.db.database2_table AS d2 ON d1.id = d2.id";
    let mut stmt = conn1.prepare(query)?;
    let rows = stmt.query_map([], |row| {
        Ok((row.get::<_, String>(0)?, row.get::<_, i32>(1)?))
    })?;

    for row in rows {
        let (name, age) = row?;
        println!("Name: {}, Age: {}", name, age);
    }

    Ok(())
}