跳到主要内容

Rust 连接 seekdb 示例程序

本文将介绍如何使用 Rust 和 seekdb 构建一个应用程序,实现创建表、插入数据和查询数据等基本操作。

前提条件

  • 您已安装 Rust 工具链(rustup)和 Cargo
  • 您已安装 seekdb

操作步骤

  1. 检查 Rust 和 Cargo 的版本
  2. 安装必要的依赖
  3. 获取 seekdb 连接信息
  4. 修改 config.rs 文件中的数据库连接信息
  5. 运行 main.rs 文件
  6. 在交互式命令行界面进行相应的操作

步骤一:检查 Rust 和 Cargo 的版本

打开终端,运行以下命令检查 Rust 和 Cargo 的版本:

rustc --version
cargo --version

步骤二:创建项目并安装必要的依赖

  1. 创建一个新的 Rust 项目:

    cargo new seekdb_demo
    cd seekdb_demo
  2. 使用 cargo 安装 mysql crate:

    cargo add mysql
  3. (可选)如果需要使用异步操作,可以安装 mysql_async crate:

    cargo add mysql_async

步骤三:获取 seekdb 连接信息

联系 seekdb 部署人员或者管理员获取相应的数据库连接串。

mysql -h$host -P$port -u$user_name -p$password -D$database_name

参数说明:

  • $host:提供 seekdb 的连接 IP。应该被实际的 IP 替换,也可以使用本地 IP 及 127.0.0.1。
  • $port:提供 seekdb 接端口。应该被实际的端口替换,默认是 2881,在部署 seekdb 时可自定义。
  • $database_name:需要访问的数据库名称。
  • $user_name:提供连接账户。格式:用户名
  • $password:提供账户密码。

步骤四:修改 main.rs 文件中的数据库连接信息

根据步骤三中的信息修改 main.rs 文件中的数据库连接信息。

  1. 进入 seekdb_demo 项目文件夹。

  2. main.rs 文件中添加或修改数据库连接信息。

    main.rs 中添加完整的示例代码如下:

    use mysql::*;
    use mysql::prelude::*;

    fn main() -> Result<(), Box<dyn std::error::Error>> {
    const OCEANBASE_CONFIG: &str = "mysql://test_user001@mysql001:password@10.10.10.1:2881/test?charset=utf8mb4";

    // Establish connection
    println!("Connecting to database...");
    let pool = Pool::new(DB_URL)?;
    let mut conn = pool.get_conn()?;
    println!("Connected successfully!");

    // Create table
    conn.query_drop(
    r"CREATE TABLE IF NOT EXISTS users (
    id INT PRIMARY KEY AUTO_INCREMENT,
    name VARCHAR(255) NOT NULL,
    email VARCHAR(255) NOT NULL,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
    )"
    )?;

    println!("Table created successfully!");

    // Insert sample data
    conn.exec_batch(
    r"INSERT INTO users (name, email) VALUES (?, ?)",
    vec![
    ("Alice", "alice@example.com"),
    ("Bob", "bob@example.com"),
    ("Charlie", "charlie@example.com"),
    ]
    )?;

    println!("Sample data inserted successfully!");

    // Query and display the data
    let selected_users = conn
    .query_map(
    "SELECT id, name, email FROM users",
    |(id, name, email)| {
    User { id, name, email }
    }
    )?;

    println!("\nCurrent users in database:");
    for user in selected_users {
    println!("ID: {}, Name: {}, Email: {}", user.id, user.name, user.email);
    }

    Ok(())
    }

    // Structure to hold user data
    struct User {
    id: i32,
    name: String,
    email: String,
    }

步骤五:运行 main.rs 文件

  1. 进入到 seekdb_demo 项目目录下:

    cd seekdb_demo
  2. 运行以下命令启动程序:

    cargo run

    返回结果如下:

    Connecting to database...
    Connected successfully!
    Table created successfully!
    Sample data inserted successfully!

    Current users in database:
    ID: 1, Name: Alice, Email: alice@example.com
    ID: 2, Name: Bob, Email: bob@example.com
    ID: 3, Name: Charlie, Email: charlie@example.com
    ID: 4, Name: Alice, Email: alice@example.com
    ID: 5, Name: Bob, Email: bob@example.com
    ID: 6, Name: Charlie, Email: charlie@example.com

常见问题

  1. 连接错误:如果无法连接到数据库,请检查:

    • 数据库地址和端口是否正确
    • 用户名和密码是否正确
    • 网络连接是否正常
  2. 权限错误:如果遇到权限相关的错误,请确保用户拥有足够的权限来执行所需的操作。

  3. SQL 语法错误:如果 SQL 语句有语法错误,请检查 SQL 语句的语法是否正确。

  4. 数据类型错误:如果插入的数据类型与表定义不匹配,请确保插入的数据类型正确。

性能优化建议

  1. 使用连接池管理数据库连接
  2. 使用异步操作提高并发性能
  3. 使用批处理操作提高数据插入效率
  4. 合理设置数据库连接超时时间