2013-04-27 42 views
1

我使用Tomcat與連接池和MySQL JDBCconnectorMySQL不能可靠地獲得汽車INC值返回由於截斷例外

我得到我的連接執行插入,並希望返回鍵的值。這是這樣做的:

conn = ds.getConnection(); 
stmt = conn.createStatement(); 
stmt.executeQuery("use "+dbname); 
sql = sql.trim(); 
int res = stmt.executeUpdate(sql); 
if (sql.toLowerCase().startsWith("insert")) { 
    rs = stmt.getGeneratedKeys() ; 
    if (rs.next()) 
    r= rs.getString(1); 
} 

所以這一直工作正常,我得到的ID返回。

如果存在DATA TRUNCATION EXCEPTION,那麼雖然插入成功,但我不能再獲取返回鍵的值。所以我最終得到了我不知道的數據庫中的值。

我需要擺脫異常或者可能改變我做這個的整個方式?

我可以修復執行更新和dbase數據類型的bean - 但我想要一個皮帶和大括號的方式來確保我沒有做到這一點,我可以獲得ID,因爲它成功了嗎?

回答

1

你可以圍繞你的整個部分像這樣的東西

try{ 
    conn.setAutoCommit(false); 
    //do stuff 
    conn.commit(); 
}catch(Exception e){ 
    //failure logic 
    try{ 
    conn.rollback(); 
    }catch(Exception e){ 
    //rollback fail logic 
    } 
    //more failure logic 
} 

這樣,你只有在兩個成功更改提交到數據庫。

+1

不要忘記回滾 – 2013-04-27 15:02:49

+0

你是對的,讓我解決這個問題。 – 2013-04-27 15:16:01

+0

嗨我試過,但同樣的問題仍然會發生。我不收回自動公司編號,SQL成功(其在數據庫中)與拋出的異常com.mysql.jdbc.MysqlDataTruncation:數據截斷:數據截斷列。 – user1882639 2013-04-27 15:17:01