我一直在单线程环境的 JavaSE 中使用 JDBC。但是现在我需要使用一个连接池并让许多线程与数据库(MSSQL 和 Oracle)进行交互,我很难做到这一点,因为我似乎对 api 缺乏一些基本的理解。
连接并记录 a 后的 AFAIKConnection
表示与数据库的物理 tcp/ip 连接。它创建Statement
的(s)可以看作是与数据库的 SQL 交互Connection
。
- 事务和回滚从何而来?是在
Connection
还是Statement
级别。 - “一个”
Connection
创建N条语句并将其提供给不同的线程以便让每个人都拥有它的使用是否安全Statement
?
如果没有,并且在配置池之后是这样的:
OracleDataSource ods = new OracleDataSource();
ods.setURL("jdbc:oracle:thin:@tnsentryname");
ods.setUser("u");
ods.setPassword("p");
顺便说一句,我在哪里设置连接池大小?
这是为了正确使用连接我将在每个线程中执行的操作吗?
//头部运行方法
Connection conn = ods.getConnection();
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("the sql");
// do what I need to do with rs
rs.close();
int updateStatus = stmt.executeUpdate("the update");
stmt.close();
conn.close();
// 线程运行方法结束
- 如果池的任何物理连接以某种方式崩溃或断开连接,池是否会自动尝试重新连接并将新连接注入池中,以便后续 pool.getConnection() 将获得健康连接?
非常感谢,请原谅我糟糕的英语。