由于截断异常,MySQL无法可靠地获取auto inc值返回

时间:2013-04-27 14:37:11

标签: java mysql jdbc

我正在使用tomcat连接池和MySQL JDBCconnector

我得到一个插件并且想要返回的键值。这是这样做的:

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,那么虽然插入成功,但我无法再获取返回键的值。所以我最终得到了数据库中我不知道的值。

我要么要么摆脱异常,要么改变我这样做的全部方式?

我可以修复执行更新的bean和dbase数据类型 - 但是我想要一个腰带和大括号的方法来确保我没有做到这一点我可以获得ID,因为它成功了吗?

1 个答案:

答案 0 :(得分: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
}

这样,如果两者都成功,则只提交对数据库的更改。