基于Rust的应用开发

本文介绍基于Rust连接并使用宽表引擎的方法。

前提条件

操作步骤

  1. 安装Rust。如何安装,请参见Rust

  2. Cargo.toml文件中,添加以下依赖项。

    [dependencies]
    mysql="*"

    mysql指定为*时默认会使用最新版本。

  3. 配置连接参数。

    let opts = OptsBuilder::new()
            .ip_or_hostname(Some("ld-uf6k8yqb741t3****-proxy-sql-lindorm-public.lindorm.rds.aliyuncs.com"))
            .user(Some("user"))
            .pass(Some("test"))
            .db_name(Some("default"))
            .tcp_port(33060);

    参数说明

    参数

    说明

    ip_or_hostname

    Lindorm宽表引擎的MySQL兼容地址。如何获取,请参见查看连接地址

    重要
    • 如果应用部署在ECS实例,建议您通过专有网络访问Lindorm实例,可获得更高的安全性和更低的网络延迟。

    • 如果应用部署在本地,在通过公网连接Lindorm实例前,需在控制台开通公网地址。开通方式:在控制台选择数据库连接 > 宽表引擎,在宽表引擎页签单击开通公网地址

    • 通过专有网络访问Lindorm实例,ip_or_hostname请填写MySQL兼容地址对应的专有网络地址。通过公网访问Lindorm实例,ip_or_hostname请填写MySQL兼容地址对应的公网地址。

    user

    如果您忘记用户密码,可以通过Lindorm宽表引擎的集群管理系统修改密码。具体操作,请参见修改用户密码

    pass

    db_name

    需要连接的数据库名称。默认连接default数据库。

    tcp_port

    Lindorm宽表引擎MySQL兼容协议的端口,固定为33060。

  4. 创建连接,通过宽表SQL语法使用Lindorm宽表引擎。以创建表为例。

    let pool = Pool::new(opts).unwrap();
    let mut conn = pool.get_conn().unwrap();
    //创建表
    conn.query_drop( r"create table if not exists user_test(id int, name varchar,age int, primary key(id))").expect("Failed to create table");
  5. 执行以下命令构建Rust项目。

    cargo build
  6. 执行以下命令运行Rust项目。

    cargo run

完整示例

完整示例代码如下:

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

fn main() {
    //连接参数,依次为Lindorm宽表引擎MySQL协议的连接地址、用户名、密码、数据库、端口
    let opts = OptsBuilder::new()
        .ip_or_hostname(Some("ld-xxxx-sql-lindorm.lindorm.rds.aliyuncs.com"))
        .user(Some("root"))
        .pass(Some("root"))
        .db_name(Some("default"))
        .tcp_port(33060);

    let pool = Pool::new(opts).unwrap();
    let mut conn = pool.get_conn().unwrap();
    //创建表
    conn.query_drop( r"create table if not exists user_test(id int, name varchar,age int, primary key(id))").expect("Failed to create table");

    //插入数据
    conn.exec_drop(r"upsert into user_test(id,name,age) values(?,?,?)",(1,"zhangsan",17)).expect("Failed to insert data 1");
    conn.exec_drop(r"upsert into user_test(id,name,age) values(?,?,?)",(2,"lisi",27)).expect("Failed to insert data 2");

    //查询数据
    let result = conn.query(r"select * from user_test").expect("Failed to select");
    for row in result {
        let(id, name, age):(i32, String, i32) = from_row(row);
        println!("Id: {}, Name: {}, Age: {}",id, name, age);
    }
}

执行成功后将返回如下结果:

Finished dev [unoptimized + debuginfo] target(s) in 0.09s
     Running `target/debug/hello_word`
Id: 1, Name: zhangsan, Age: 17
Id: 2, Name: lisi, Age: 27