Database 使用生锈的甲骨文板条箱
我正在尝试用rust连接到oracle数据库。 我安装了这个库:Database 使用生锈的甲骨文板条箱,database,oracle,rust,Database,Oracle,Rust,我正在尝试用rust连接到oracle数据库。 我安装了这个库: [dependencies] oracle = "0.3.2" 这是代码: extern crate oracle; use oracle::{Connection, Error}; fn main() { let conn = Connection::connect("user", "pwd", "//194.1.1.253/db"); if conn.is_ok() { // let sq
[dependencies]
oracle = "0.3.2"
这是代码:
extern crate oracle;
use oracle::{Connection, Error};
fn main() {
let conn = Connection::connect("user", "pwd", "//194.1.1.253/db");
if conn.is_ok() {
// let sql = "SELECT * FROM mat_anag WHERE ditmat = :1 AND fvl = :2";
let sql = "SELECT * FROM mat_anag WHERE ditmat = 'XXL' AND fvl = ' '";
let rows = conn.query(sql, &[])?;
} else {
println!("KO");
}
}
问题是我得到了这个错误:错误[E0599]:在当前范围内找不到枚举std::result::result
的名为query
的方法
编辑 谢谢大家的建议。 我修改了代码,它可以工作:
extern crate oracle;
use oracle::{Connection};
fn main() {
let conn = Connection::connect("user", "pwd", "//194.1.1.253/db"); {
Ok(conn) => {
let sql = "SELECT * FROM anag_conti WHERE ditagenda = 'XXL' AND fvl = ' '";
let rows = conn.query(sql, &[]).unwrap();
for r in rows {
let row = r.unwrap();
let conto: String = row.get("CONTO").unwrap();
println!("{}", conto);
}
}
Err(_e) => panic!("Errore di connessione")
};
}
方法
Connection::connect
返回一个结果
,因为连接可能失败。你需要在你的程序中处理这个问题
最简单的方法是对结果调用.unwrap()
或.expect()
。这些方法返回结果的Ok
值和panic代码>如果有错误
extern crate oracle;
use oracle::{Connection, Error};
fn main() {
let conn = Connection::connect("md_s", "md_s", "//194.1.1.253/c4b").expect("Could not connect");
// let sql = "SELECT * FROM mat_anag WHERE ditmat = :1 AND fvl = :2";
let sql = "SELECT * FROM mat_anag WHERE ditmat = 'XXL' AND fvl = ' '";
let rows = conn.query(sql, &[])?;
}
还可以使用匹配
表达式进行更强大的错误处理
let conn = match Connection::connect("md_s", "md_s", "//194.1.1.253/c4b") {
Ok(conn) => conn,
Err(e) => panic!("Encountered an error when connecting to the database: {:?}", e)
};
或者类似于:
match Connection::connect("md_s", "md_s", "//194.1.1.253/c4b") {
Ok(conn) => {
<do something with the result here>
},
Err(e) => panic!("Encountered an error when connecting to the database: {:?}", e)
};
匹配连接::连接(“md_s”,“md_s”,“//194.1.1.253/c4b”){
正常(连接)=>{
},
Err(e)=>panic!(“连接到数据库时遇到错误:{:?}”,e)
};
您可能会找到并且。方法Connection::connect
返回一个结果,因为连接可能失败。你需要在你的程序中处理这个问题
最简单的方法是对结果调用.unwrap()
或.expect()
。这些方法返回结果的Ok
值和panic代码>如果有错误
extern crate oracle;
use oracle::{Connection, Error};
fn main() {
let conn = Connection::connect("md_s", "md_s", "//194.1.1.253/c4b").expect("Could not connect");
// let sql = "SELECT * FROM mat_anag WHERE ditmat = :1 AND fvl = :2";
let sql = "SELECT * FROM mat_anag WHERE ditmat = 'XXL' AND fvl = ' '";
let rows = conn.query(sql, &[])?;
}
还可以使用匹配
表达式进行更强大的错误处理
let conn = match Connection::connect("md_s", "md_s", "//194.1.1.253/c4b") {
Ok(conn) => conn,
Err(e) => panic!("Encountered an error when connecting to the database: {:?}", e)
};
或者类似于:
match Connection::connect("md_s", "md_s", "//194.1.1.253/c4b") {
Ok(conn) => {
<do something with the result here>
},
Err(e) => panic!("Encountered an error when connecting to the database: {:?}", e)
};
匹配连接::连接(“md_s”,“md_s”,“//194.1.1.253/c4b”){
正常(连接)=>{
},
Err(e)=>panic!(“连接到数据库时遇到错误:{:?}”,e)
};
您可能会找到并且。您的conn
变量是一个结果
类型,它封装了所需的连接
类型,因为它可能存在错误
因此,您需要的是访问连接,您可以通过以下几种方式进行访问:
- 简单但不好的方法:
conn.unwrap().query()
。
这将在出现错误时引起恐慌。您的expect(“错误消息”)
也有同样的问题
- 最好处理您的错误:
- 由于您只需打印
“KO”
,因此不使用错误,因此您也可以执行类似操作:
您的conn
变量是一个Result
类型,它封装了所需的连接
类型,因为它可能存在错误
因此,您需要的是访问连接,您可以通过以下几种方式进行访问:
- 简单但不好的方法:
conn.unwrap().query()
。
这将在出现错误时引起恐慌。您的expect(“错误消息”)
也有同样的问题
- 最好处理您的错误:
- 由于您只需打印
“KO”
,因此不使用错误,因此您也可以执行类似操作:
由于Connection::connect
可能会失败,因此产生了一个结果。“故障用结果
类型表示。结果
可以是成功案例中的正常
,也可以是失败案例中的错误
。”检查是否正常
不会自动将值转换为其正常
值。您会得到一个结果,因为连接::连接
可能会失败。“故障用结果
类型表示。结果
可能是成功案例中的正常
,也可能是失败案例中的错误。检查是否正常
不会自动将值转换为其正常
值。”。