execute_query/
execute_query.rs1extern crate odbc_safe;
2
3use ibm_db::{ODBCConnectionManager, Statement, ResultSetState::{Data,NoData}, Connection};
4use odbc_safe::AutocommitOn;
5use std::io;
6use std::error::Error;
7
8fn main() {
9
10
11
12 match connect() {
13 Ok(()) => println!("Success"),
14 Err(diag) => println!("Error: {}", diag),
15 }
16}
17
18fn connect() -> Result<(), Box<dyn Error>> {
19 let manager = ODBCConnectionManager::new("DSN=dashdb;DATABASE=FOO;hostname=test@test.com;PORT=0000;UID=admin;PWD=admin;");
20 let pool = r2d2::Pool::new(manager).unwrap();
21 let pool = pool.clone();
22 let pool_conn = pool.get().unwrap();
23 let conn = pool_conn.raw();
24 execute_statement(&conn)
25}
26
27fn execute_statement(conn: &Connection<AutocommitOn>) -> Result<(), Box<dyn Error>> {
28 let stmt = Statement::with_parent(conn)?;
29
30 let mut sql_text = String::new();
31 println!("Please enter SQL statement string: ");
32 io::stdin().read_line(&mut sql_text).unwrap();
33
34 match stmt.exec_direct(&sql_text)? {
35 Data(mut stmt) => {
36 let cols = stmt.num_result_cols()?;
37 while let Some(mut cursor) = stmt.fetch()? {
38 for i in 1..(cols + 1) {
39 match cursor.get_data::<&str>(i as u16)? {
40 Some(val) => print!(" {}", val),
41 None => print!(" NULL"),
42 }
43 }
44 println!();
45 }
46 }
47 NoData(_) => println!("Query executed, no data returned"),
48 }
49
50 Ok(())
51}