在Rust中使用Oracle板条箱[重复]

问题描述 投票:0回答:2
我正在尝试使用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 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]:在当前范围内没有为枚举query找到名为std::result::Result<oracle::Connection, oracle::Error>的方法


编辑

谢谢大家的建议。我修改了代码,它起作用了:

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") }; }

database oracle rust
2个回答
0
投票
您的conn变量是Result类型,它包装了所需的Connection类型,因为它可能会出错。

因此,您需要通过多种方式访问​​连接:

    简单但不好的方法:conn.unwrap().query()。这将在出现错误时惊慌。您对expect("Error message")也有相同的问题。
  • 最好处理您的错误:
  • match conn { Ok(conn) => conn.query(), Err(_) => println!("KO") }
      由于仅打印"KO",所以您不会使用该错误,因此您也可以执行以下操作:
  • if let Ok(conn) = conn { conn.query(); } else { println!("KO"); }

  • 1
    投票
    方法Connection::connect返回Result,因为连接可能失败。您需要在程序中处理此问题。

    最简单的方法是在结果上调用.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, &[])?; }

    您还可以使用match表达式进行更强大的错误处理。

    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) };

    您可能会找到the documentation page for Result useful以及Result
    © www.soinside.com 2019 - 2024. All rights reserved.