一个Statement对象,多个executeUpdates

时间:2011-06-15 12:47:48

标签: java jdbc

建议只创建一个Statement对象并在其上执行多个executeUpdate()?

// Vantages/drawbacks of this solution?
conn.setAutocommit(false);

Statement stmt = conn.createStatement();
stmt.executeUpdate('[ANY_INSERT_SQL]');
stmt.executeUpdate('[ANY_INSERT_SQL]');
stmt.executeUpdate('[ANY_INSERT_SQL]');

conn.commit();

或者每个executeUpdate更好一个Statement对象:

// Vantages/drawbacks of this solution?
conn.setAutocommit(false);

Statement stmt1 = conn.createStatement();
stmt1.executeUpdate('[ANY_INSERT_SQL]');
Statement stmt2 = conn.createStatement();
stmt2.executeUpdate('[ANY_INSERT_SQL]');
Statement stmt3 = conn.createStatement();
stmt3.executeUpdate('[ANY_INSERT_SQL]');

conn.commit();

提前致谢。

PS:我知道PreparedStatement类,我经常使用它,但我怀疑是语句使用。

2 个答案:

答案 0 :(得分:4)

没关系,只要确保关闭所有语句对象。

答案 1 :(得分:1)

基于javadoc,A语句只能有一个关联的ResultSet对象。

  

用于执行静态的对象   SQL语句并返回   它产生的结果。

     

默认情况下,只有一个ResultSet对象   每个Statement对象可以打开   同一时间。因此,如果   读取一个ResultSet对象是   交错阅读   另外,每个人都必须已经生成   通过不同的Statement对象。所有   Statement中的执行方法   接口隐式关闭a   statment的当前ResultSet对象if   一个开放的存在。

http://download.oracle.com/javase/1.4.2/docs/api/java/sql/Statement.html

如果您需要同时处理多个结果集,也许更多的语句是有意义的。

可能更多时候,你只需要使用一个。

性能方面,可能更好,因为它可以减少活动资源。