Java 已编制报表列表
我只是想知道我是否声明Java 已编制报表列表,java,jdbc,arraylist,Java,Jdbc,Arraylist,我只是想知道我是否声明ArrayList ps=newarraylist()并添加语句 public void addQuery(String query){ try{ Connection con = connect(); PreparedStatement p = con.prepareStatement(query); ps.add(p); } catch (Exception e){ } }
ArrayList ps=newarraylist()使用此方法编写>并添加语句
public void addQuery(String query){
try{
Connection con = connect();
PreparedStatement p = con.prepareStatement(query);
ps.add(p);
} catch (Exception e){
}
}
如果调用ps.clear
方法,存储在ArrayList
中的connection和PreparedStatements是否将关闭?我试过这个
public void addQuery(String query){
try(Connection con = connect(); PreparedStatement p = con.prepareStatement(query);){
ps.add(p);
}
}
但是当我执行存储在ArrayList
中的PreparedStatements
时,我得到了错误
语句关闭后不允许执行任何操作
最好的做法是什么?首先,try/catch块中的PreparedStatement与ps列表中的语句相同。将对象添加到列表时,不会复制该对象,列表保留对原始对象的引用。所以当你们关闭连接时,它到处都会关闭
其次,“ps.clear()”不会关闭您的连接,它只是从列表中删除对您的连接对象的引用,所以您不能依靠clear()
关闭您的连接。希望这有帮助
如果调用
ps.clear()`方法,存储在ArrayList中的连接和PreparedStatements是否将关闭
否。清除数组与数组包含的内容无关。但是,所有准备好的语句都将在您关闭它们或它们从中创建的连接后立即关闭,这是try with resources语句的结果,这就是为什么会出现该异常
这也是为什么这是毫无意义的
准备好的语句的要点之一是给连接池、JDBC驱动程序或数据库服务器本身一个缓存它们的机会。你不需要自己做。最好的办法是忘记将PreparedStatements
放在列表中。我不知道你想用它实现什么,但它没有任何意义,只会使你的代码变得不必要的复杂。永远不要编写catch(Exception e){}
elways正确处理异常这听起来是一种糟糕的方法。还记得上一个问题吗?你只会让你的代码更脆弱。在你开始发明自己的“聪明”解决方案之前,试着使用标准的习惯用法。@UsagiMiyamotoArrayList.clear()
与PreparedStatement.close()
@SedrickJefferson完全没有关系,只与标题有关。实际的问题和答案是完全不同的。那么存储在ArrayList的preparedStatement中的连接将如何关闭呢?正如我已经清楚地说明的,通过try with resources语句。该语法除了确保资源退出时关闭外,没有其他用途。如果你不知道它的作用,很难理解你为什么要使用它。