2014-01-08 34 views
0

我對java.sql.PreparedStatement上的ExceptionHandling有個問題。PreparedStatements上的異常處理ExecuteBatch()(不是獲取異常,而是語句本身)

我有一個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例外循環」我得到所有異常, ,但它有一種方法來獲得本聲明的GeneratedKey的w這裏的例外是? 與RETURN_GENERATED_KEYS它不工作,可能是因爲批量? 或者,也許會得到自己的聲明? 因爲我有一個類來打印出帶有generatedKey的完整Statement,就像DB2獲得Statement一樣。

感謝答案,

弗洛裏安

回答

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(); 
+0

謝謝您的回答得到了生成的密鑰, 用則ExecuteBatch(),它是: INT []的RowsAffected = insertTEZDETAIL.executeBatch(); ??? – user3173681

+0

'XPrepareStatment'是你自己的課程? –

+0

難道這是他們在談論:http://www.openoffice.org/api/docs/common/ref/com/sun/star/sdbc/XPreparedStatement.html但是我沒有看到任何'executeBatch'方法。 –