PrepareStatement st = conn.prepareStatement();
st.setObject();
....
st.executeUpdate();st = conn.prepareStatement();
st.setObject();
...
st.executeUpdate();
st.close();
conn.close();这样重复使用PrepareStatement对不对?如果碰到这样的逻辑 一般怎么处理?一次要插入多条SQL语句(这几条语句有联系) 除了存储过程。

解决方案 »

  1.   

    PreparedStatement.addBatch()
              将一组参数添加到此 PreparedStatement 对象的批处理命令中。
    Statement.executeBatch()
    将一批命令提交给数据库来执行,如果全部命令执行成功,则返回更新计数组成的数组。返回数组的 int 元素的排序对应于批中的命令,批中的命令根据被添加到批中的顺序排序。方法 executeBatch 返回的数组中的元素可能为以下元素之一:   1. 大于等于 0 的数 - 指示成功处理了命令,是给出执行命令所影响数据库中行数的更新计数
       2. SUCCESS_NO_INFO 的值 - 指示成功执行了命令,但受影响的行数是未知的      如果批量更新中的命令之一无法正确执行,则此方法抛出 BatchUpdateException,并且 JDBC 驱动程序可能继续处理批处理中的剩余命令,也可能不执行。无论如何,驱动程序的行为必须与特定的 DBMS 一致,要么始终继续处理命令,要么永远不继续处理命令。如果驱动程序在某一次失败后继续进行处理,则 BatchUpdateException.getUpdateCounts 方法返回的数组将包含的元素与批中存在的命令一样多,并且其中至少有一个元素将为:   3. EXECUTE_FAILED 的值 - 指示未能成功执行命令,仅当命令失败后驱动程序继续处理命令时出现 在 Java 2 SDK, Standard Edition, 1.3 版中已经修改了可能的实现和返回值,以适应抛出 BatchUpdateException 对象后在批量更新中继续处理命令的选项。 
      

  2.   

    PrepareStatement 是可以重复使用的,也是提倡重复使用的。但是你的例子中,没有做到重用。
    重用 PrepareStatement 可以提高程序运行效率的