1
我想基於以下代碼一個MySQL表中插入信息插入過程中寫一個try catch特殊異常消息:在一個MySQL表
public void writeMapDocNameToDocId(File file, ArrayList<String> docNames) {
PreparedStatement preparedStmt= null;
try{
conn.setAutoCommit(false);
String query = " insert into DocumentNameId (docName)"
+ " values (?)";
preparedStmt = conn.prepareStatement(query);
int i=0;
for (String docName : docNames)
{
preparedStmt.setString (1, docName);
preparedStmt.addBatch();
i++;
if (i % 1000 == 0 || i == docNames.size()) {
preparedStmt.executeBatch();
}
}
conn.commit();
preparedStmt.close();
conn.setAutoCommit(true);
}
catch(Exception e){
e.printStackTrace();
}
}
我有以下錯誤一些可採用DocName的。
java.sql.BatchUpdateException: Data truncation: Data too long for column 'docName' at row 1
at com.mysql.jdbc.PreparedStatement.executeBatchSerially(PreparedStatement.java:1269)
at com.mysql.jdbc.PreparedStatement.executeBatch(PreparedStatement.java:955)
at dataLayer.RepositorySQL.writeMapDocNameToDocId(RepositorySQL.java:508)
我想知道哪些docNames造成這個錯誤,但我不知道我應該怎麼寫漁獲消息告訴我docName.Since,DOCNAME在卡位體是不明確的。
我不是java和MySQLso的專家,我的代碼可能基於錯誤的基礎。請幫我瞭解我的錯誤
從你已經得到的最簡單的方法就是將'i'的聲明移到'try'之外,然後在異常中移動'i'的值,確定哪個元素在你的數組中導致了錯誤。 – CubeJockey
在循環中打印出'docName'。或者更好^ – 3kings
@ 3kings我試過,但它是代碼的一部分,這個函數調用更復雜的類,這個函數調用的次數超過100000次。 – Suri