我对特定的测试用例感到好奇,想知道它是否是一个现实的场景。
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.getInt(1)会是threadSafe吗?我有一个Connection对象。这种情况对我来说似乎不太可能,但我仍然希望你的意见。
由于
答案 0 :(得分:0)
单独获取各列的值可能是线程安全的,因为它是只读的。但是,行到行导航绝不是线程安全的,我相信这与构建JDBC的基本ODBC规范有很大关系。
风险在于一个线程可能从一行获取值,并且行已更改,并且您具有来自2行或更多行的值。无法跟踪此情况,当另一个线程移动时,无法为一个线程提供行处理。
另外,建议你使用try-with-resources,PreparedStatement和ResultSet可以在关闭时抛出异常,尝试使用资源让你避免它。