写数据库代码时候经常会用到try catch 。
但是一下子都把所有的东西写在try里,很显然在错误定位的时候,
很难发现真正错误的原因,而且性能上来说也不是个很好的表率。
看看下面这个:
可以看到这段代码里出现的不规范很多,而且这并不是维护的代码中最突出的。
但是这次特别说明的是代码过多的放到了try中,这样很容易让错误隐藏。
如果这样写就可以避免很多不必要的问题:
但是一下子都把所有的东西写在try里,很显然在错误定位的时候,
很难发现真正错误的原因,而且性能上来说也不是个很好的表率。
看看下面这个:
Transaction trans = db.getTransaction();
try {
trans.begin();
String s_cgbh = Decoder.getParameter(request, "cgbh");
String s_kwmc = Decoder.getParameter(request, "kwmc");
long l_kw = AutoEmbody(request, s_cgbh, s_kwmc);
if (l_kw == 0) {
db.executeUpdate("DELETE FROM SLXX WHERE CGBH='" + s_cgbh + "'");
db.executeUpdate("INSERT INTO SLXX(CGBH,SLDM,SLMC,SLNF,ID) SELECT '" + s_cgbh + "',QKSYDM, QKSYMC,TO_CHAR(SYSDATE,'YYYY'),xmryxx_seq.nextval FROM LWQKXX,SLQK,QKSY WHERE LWQKXX.LSH=SLQK.LWQKLSH AND SLQK.QKSYDM=QKSY.QKSYDM AND LWQKXX.KWMC=' "+ s_kwmc + "'");
}
db.executeUpdate(SqlSciencepaperManager.getSciencepaperInsertSql(request));
trans.commit();
} catch (Exception ex) {
trans.rollback();
throw ex;
}
可以看到这段代码里出现的不规范很多,而且这并不是维护的代码中最突出的。
但是这次特别说明的是代码过多的放到了try中,这样很容易让错误隐藏。
如果这样写就可以避免很多不必要的问题:
Transaction trans = db.getTransaction();
String s_cgbh = Decoder.getParameter(request, "cgbh");
String s_kwmc = Decoder.getParameter(request, "kwmc");
long l_kw = AutoEmbody(request, s_cgbh, s_kwmc);
StringBuffer delSqlBuf = new StringBuffer("DELETE FROM SLXX WHERE CGBH='").append(s_cgbh).append("'");
StringBuffer insertSqlBuf = new StringBuffer(128);
insertSqlBuf.append("INSERT INTO SLXX(CGBH,SLDM,SLMC,SLNF,ID) SELECT '")
.append(s_cgbh).append("',QKSYDM, QKSYMC,TO_CHAR(SYSDATE,'YYYY'),xmryxx_seq.nextval FROM LWQKXX,SLQK,QKSY WHERE LWQKXX.LSH=SLQK.LWQKLSH AND SLQK.QKSYDM=QKSY.QKSYDM AND LWQKXX.KWMC=' ")
.append(s_kwmc).append("'");
try {
trans.begin();
if (l_kw == 0) {
db.executeUpdate(delSqlBuf.toString());
db.executeUpdate(insertSqlBuf.toString());
}
db.executeUpdate(SqlSciencepaperManager.getSciencepaperInsertSql(request));
trans.commit();
} catch (Exception ex) {
trans.rollback();
throw ex;
}