Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 结果集线程安全?_Java_Jdbc_Thread Safety - Fatal编程技术网

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是一种协议。