Rust语言接口简介

Rust 是一门帮助你编写更快、更可靠软件的编程语言。高层工程学与底层控制在其他编程语言设计 中往往是相互矛盾的;通过平很强大的技术能力与优秀的开发体验,Rust 提供了控制底层细节(比 如内存使用)的选择,并免受通常随之而来的所有烦恼。

Crates.io平台中有多个通过odbc驱动访问数据库的crate,比如

odbc : 0.17.0

rs-odbc : 0.1.0

odbc-api : 0.45.1

从crate活跃度看,odbc-api的活跃度较高,应用访问较广一些,本文将以odbc-api来讲解如何通过odbc-api来访问神通数据库。

odbc-api接口依赖情况如下,依赖的环境是运行必须的,因此需要注意:

../../../../_images/lay5.png

注解

由于基于cargo进行rust编程,cargo要求所有引用的crate都必须是发布到crates.io平台上的,因此离线部署odbc-api会非常麻烦。

odbc环境安装

Windows下需要注册好神通数据库的odbc驱动,并做好可连接的校验;

Linux下需要安装好unixodbc,同时注册好神通数据库的odbc驱动,做好可连接的验证。

详细参考神通数据库的odbc程序员开发手册中在windows和Linux环境下下的配置内容。

odbc-api安装

开发在项目文件Cargo.toml中添加依赖名称如下:

[dependencies]

odbc-api = "0.45.1"

在编译项目时,会下载odbc-api及其相关依赖,下载后的路径一般在cargo的工作目录中,比如:

Linux环境下的root用户,carog的工作目录为/root/.cargo/

Windows环境下的administrator用户,cargo的工作目录为C:UsersAdministrator.cargo

使用odbc-api访问数据库的demo

创建一个cargo项目test_rust_odbc

1)创建项目:

cargo new test_rust_odbc --bin

2)修改代码

进入到test_rust_odbc项目目录,会有一个Cargo.toml文件,修改文件如下:

../../../../_images/demo3.png

修改src/main.rs文件,输入以下内容:

use lazy_static::lazy_static;
use odbc_api::{
    buffers,
    buffers::TextColumn,
    handles::{CDataMut, Statement},
    Connection, Cursor, Environment, Error, RowSetBuffer, U16Str,
};


lazy_static! {
    pub static ref ENV: Environment = {
        Environment::new().unwrap()
    };
}

fn main()-> Result<(), odbc_api::Error> {
    let connection_string = "
    Driver={OSCAR ODBC DRIVER};\
    Database=osrdb;\
    Server=localhost;\
    Port=2003;\
    UID=SYSDBA;\
    PWD=szoscar55;\
";

let mut conn = ENV.connect_with_connection_string(connection_string)?;
let drop_table = "DROP TABLE IF EXISTS test";
conn.execute(&drop_table, ())?;

let create_table = "create table test( a int ,b varchar(30))";
conn.execute(&create_table, ())?;

let mut insert_table = "insert into test values( 1 ,'a')";
conn.execute(&insert_table, ())?;
insert_table = "insert into test values( 2 ,'b')";
conn.execute(&insert_table, ())?;
let query = "SELECT * FROM test";
let cursor = conn.execute(&query, ())?;
println!("Hello, world!");
Ok(())
}

3)编译

进入test_rust_odbc项目目录下,在终端中输入:

cargo build

4)执行

进入test_rust_odbc项目目录下,在终端中输入:

cargo run

执行成功则打印Hello, world!。