PreparedStatements ExecuteBatch()上的异常处理(不是获取异常,而是获取Statement本身)

时间:2014-01-08 15:04:12

标签: java sql jdbc prepared-statement

我对java.sql.PreparedStatement上的ExceptionHandling有一个问题。

我有一个PreparedStatement:

insertTEZDETAIL = new XPreparedStatement(con, "INSERT INTO TEZDETAIL (PACKAGE_ID, LFDNR, ARCHIVTAG, PAYINF)"
                 + " Values(?, ?, ? ,XMLPARSE(DOCUMENT CAST(? AS CLOB)))" );

并批量添加许多语句:

        insertTEZDETAIL.setInt(1, paket_id);
        insertTEZDETAIL.setInt(2, Counter1);
        insertTEZDETAIL.setString(3, archiv_dat);
        SQLXML xmlvar = con.createSQLXML();
        xmlvar.setString(gesXML.toString());
        insertTEZDETAIL.setSQLXML(4, xmlvar);

        insertTEZDETAIL.addBatch();

现在我执行批处理:

 public static void DB2Commit()
 {
    try
    {   insertTEZDETAIL.executeBatch();
    } catch (SQLException ex)
    {   for ( ; ex != null ; ex = ex.getNextException ())
        {
            ex.printStackTrace ();
        }
        try
        {
            con.rollback();
        } catch (SQLException e) {
            e.printStackTrace();
            System.exit(12);
        }
        System.err.println("Fehler beim execute Batch");
        System.exit(12);
    }
 }

使用“Forech异常循环”,我得到所有异常, 但它有一种方法来获取此Statement的GeneratedKey的异常是什么? 使用RETURN_GENERATED_KEYS它不起作用,可能因为Batch? 或者也许是为了自己获得声明? 因为我有一个类用generateKey打印出完整的Statement,就像DB2获取Statement一样。

感谢回答,

弗洛里安

1 个答案:

答案 0 :(得分:0)

您可以使用

获取生成的密钥
PreparedStatement pstmt = connection.prepareStatement(query,  Statement.RETURN_GENERATED_KEYS);
int rowsAffected = pstmt.executeUpdate();
ResultSet rs = pstmt.getGeneratedKeys();
int newId = -1;
if (rs.next()) 
{
  newId = rs.getInt(1);
}
rs.close();
pstmt.close();