我正在用Java构建一个应用程序,将数据存储到Mysql数据库中。
因此,如果数据被正确地保存在数据库setAutocommit=true上,我将构建首先保存数据的代码setAutocommit=false。
如果出现错误,则执行数据回滚。
所以代码是execute never error但不起作用,因为我尝试保存的数据有一个主键Integer自动递增,如果在下一次保存时出现错误,系统会跳过数字。
例如,如果我试图保存另一条记录CodiceFattura = 101,那么在我的数据库中,文件CodiceFattura = 100。现在,如果我有CodiceFattura = 100,我尝试保存,我有一个错误,我修复了错误,然后保存CodiceFattura = 102而不是101。
代码如下:
public boolean salvaFattura(String tipoFattura){
fatturaIstanza= istanziaValori(null);
boolean tuttoOk=false;
try{
setCommitManager(false);
tuttoOk=modelManager.getFatturaManager().inserisciFatturaArticoliSenzaCodice(fatturaIstanza,tipoFattura);
if(!tuttoOk){
VisualMessageFattura.getErrore();
eseguiRollBack();
}
Integer.parseInt(null);
setCommitManager(true);
}
catch(Exception e){
VisualMessage.getShowMessaggioErroreFatturaSalvata("Fattura");
log.logStackTrace(e);
eseguiRollBanck();
return false;
}
return tuttoOk;
}
public void eseguiRollBanck(){
try{
modelManager.getFatturaManager().eseguiRollBack();
}catch(Exception e){
log.logStackTrace(e);
}
try{
db.eseguiRollBack();
}catch(Exception e){
log.logStackTrace(e);
}
}
public void setCommitManager(Boolean state){
modelManager.getFatturaManager().setAutoCommit(state);
}
public void eseguiRollBack(){
try {
db.rollback();
} catch (SQLException e) {
log.logStackTrace(e);
//VisualMessage.getErroreDB();
}
}
public void setAutoCommit(boolean autoCommit){
try {
db.setAutoCommit(autoCommit);
} catch (SQLException e) {
log.logStackTrace(e);
VisualMessage.getErroreDB();
}
}发布于 2016-08-12 18:56:50
这是与以下问题相同的问题:
COMMIT OR conn.setAutoCommit(true)
简而言之,您没有以正确的方式使用setAutoCommit,所以这种代码行为是正确的,您应该显式调用commit方法,或者让Auto Commit继续自动提交事务。
https://stackoverflow.com/questions/38916177
复制相似问题