【发布时间】:2010-11-19 08:05:18
【问题描述】:
我一直在单线程环境的 JavaSE 中使用 JDBC。但是现在我需要使用一个连接池并让许多线程与数据库(MSSQL 和 Oracle)进行交互,我很难做到这一点,因为我似乎对 api 缺乏一些基本的理解。
连接并记录Connection 后的AFAIK 表示与数据库的物理tcp/ip 连接。它创建Statement(s),可以看作是通过Connection与数据库进行SQL交互。
- 事务和回滚从何而来?是在
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() 将获得健康连接?
非常感谢,请原谅我的英语不好。
【问题讨论】:
标签: java oracle multithreading jdbc connection-pooling