Skip to main content

execute_query/
execute_query.rs

1extern 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    // TODO: Update with your actual database connection details
20    let manager = ODBCConnectionManager::new("DRIVER={IBM DB2 ODBC DRIVER};DATABASE=SAMPLE;HOSTNAME=db.example.com;PORT=50000;UID=db_user;PWD=YourPassword123");
21    let pool = r2d2::Pool::new(manager).unwrap();
22    let pool = pool.clone();
23    let pool_conn = pool.get().unwrap();
24    let conn = pool_conn.raw();
25    execute_statement(&conn)
26}
27
28fn execute_statement(conn: &Connection<AutocommitOn>) -> Result<(), Box<dyn Error>> {
29    let stmt = Statement::with_parent(conn)?;
30
31    let mut sql_text = String::new();
32    println!("Please enter SQL statement string: ");
33    io::stdin().read_line(&mut sql_text).unwrap();
34
35    match stmt.exec_direct(&sql_text)? {
36        Data(mut stmt) => {
37            let cols = stmt.num_result_cols()?;
38            while let Some(mut cursor) = stmt.fetch()? {
39                for i in 1..(cols + 1) {
40                    match cursor.get_data::<&str>(i as u16)? {
41                        Some(val) => print!(" {}", val),
42                        None => print!(" NULL"),
43                    }
44                }
45                println!();
46            }
47        }
48        NoData(_) => println!("Query executed, no data returned"),
49    }
50
51    Ok(())
52}