Java 在方法内调用时可以使用相同的连接对象吗?

Java 在方法内调用时可以使用相同的连接对象吗?,java,jdbc,Java,Jdbc,我有一个这样的程序: public void MethodOne() { String sqlquery = "select * from vendor_items where category_id = 1 "; PreparedStatement consildatedPst = connection.prepareStatement(sqlquery); ResultSet consilatedReslset = consildatedpst.executeQuer

我有一个这样的程序:

public void MethodOne()
{
    String sqlquery = "select * from vendor_items where category_id = 1 ";
    PreparedStatement consildatedPst = connection.prepareStatement(sqlquery);
    ResultSet consilatedReslset = consildatedpst.executeQuery();
    while(consilatedReslset.next())
    {
        String name = consilatedReslset.getString("name");
        if(name!=null)
        {
            MethodTwo();
        }
    }
}

public void MethodTwo(String name)
{
    String sqlquery2 = "select ename from Vendor where name=?";
    PreparedStatement otherPst = connection.prepareStatement(sqlquery2);
    otherPst.setString(1,name);
}
这就是建立连接的方式(稍后我将讨论连接池)

我的问题是,在方法内调用时是否可以使用相同的连接对象???

是的,可以

当您这样做时:

connection.prepareStatement(sqlquery2);
它使用相同的连接创建一个新的语句对象。因此,您从中获得的结果集将属于不同的语句,并且将是不同的,对您来说不会有任何问题


简而言之:不同的语句管理不同的结果集。如果在获得第二条语句时从同一条语句中获得两个结果集,则第一条语句将被删除,但如果有两条语句,则可以毫无问题地管理两个结果集(当然是在连接打开的情况下)

仅当您没有在多个线程中使用连接或嵌套自己的方法时。换句话说,不是。每个方法使用一个新连接。要避免开销,请使用连接池。

除非您首先完成连接,例如读取整个
结果集。否则,
ResultSet
将不再绑定到活动游标。为什么不将ResultSet中的名称存储在某个列表中,然后迭代该列表并调用method@ElliottFrisch为什么?两个不同的PreparedStatements有两个不同的结果集。@Eddie一个语句通常由一个游标支持。每个游标一个连接。这就是数据库通常的工作方式。@ElliottFrisch JDBC4规范说,您可以同时使用同一连接中的不同语句(中的第13.1.1点),我在postgresql中多次这样做,并且知道在oracle中,您可以配置每个连接的最大游标数。巴卢斯克在这里这么说(我知道权威的论点:逻辑谬误):那么我认为你错了。为什么不呢?他没有使用线程——JDBC不能保证连接中的线程安全——甚至不能更新DDBB——这可能会改变查询的响应。在不同preparedstatements的嵌套方法中使用相同的连接有什么错?
connection.prepareStatement(sqlquery2);