Java 结果集线程安全?
我对特定的测试用例很好奇,想知道它是否是一个现实的场景Java 结果集线程安全?,java,jdbc,thread-safety,Java,Jdbc,Thread Safety,我对特定的测试用例很好奇,想知道它是否是一个现实的场景 public void doSomething() { ResultSet rs = null; PreparedStatement ps = null; try { ps = conn.createStatement(/* some query */); ps.executeUpdate(); rs = ps.getGeneratedKeys();
public void doSomething()
{
ResultSet rs = null;
PreparedStatement ps = null;
try
{
ps = conn.createStatement(/* some query */);
ps.executeUpdate();
rs = ps.getGeneratedKeys();
rs.next();
int temp = rs.getInt(1);
} catch(Exception e ) { /* Exception Handlign */}
finally {
ps.close();
rs.close();
}
}
对于上面的代码,rs.getInt1是线程安全的吗?我只有一个连接对象。这种情况对我来说似乎不大可能,但我还是想听听你的意见
多亏了它本身,获取单个列的值可能是线程安全的,因为它是只读的。然而,行到行的导航从来都不是线程安全的,我相信这与JDBC所基于的基本ODBC规范有更多的关系 风险在于,一个线程可能从一行中获取值,而该行被更改,并且您有来自两行或更多行的值。没有办法跟踪这一点,也没有办法让一个线程在另一个线程四处移动的同时处理该行
另外,建议您使用try with resources,PreparedStatement和ResultSet可以在关闭时引发异常,try with resources让您避免它。可能重复您所说的线程安全是什么意思?您的代码中到底在哪里有多个线程?代码中的结果集是方法本地的,没有泄漏。不可能出现线程安全问题。JDBC不是基于ODBC构建的。JDBC是一种API。ODBC是一种协议。