jdbc/
lib.rs

1use std::sync::Arc;
2
3use errors::Error;
4use jni::{objects::GlobalRef, JavaVM};
5
6mod builder;
7pub mod errors;
8pub mod util;
9pub mod wrapper;
10
11pub use builder::*;
12use wrapper::sql;
13
14#[derive(Debug, Clone)]
15pub struct Datasource {
16    vm: Arc<JavaVM>,
17    inner: GlobalRef,
18}
19
20pub use wrapper::sql::Connection;
21
22impl Datasource {
23    pub fn new(vm: Arc<JavaVM>, inner: GlobalRef) -> Self {
24        Datasource { vm, inner }
25    }
26
27    pub fn get_connection(&self) -> Result<sql::Connection, Error> {
28        let mut env = self.vm.attach_current_thread()?;
29        let ds_ref = &*self.inner;
30        let mut datasource = sql::DataSource::from_ref(&mut env, ds_ref)?;
31        let conn = datasource.get_connection(env)?;
32        Ok(conn)
33    }
34}