java之try-catch
遇到一個非常簡單沒有技術含量的問題,跑去問同事還是比較尷尬的事情,例如我今天就遇到了,大家都知道,service直接調用mapper.xml裏面的insert的時候,我們沒有辦法通過快捷鍵拿到本條sql,只能看控制檯,喜歡研究插件的童鞋們一定會安裝mybatis的插件,但是我比較懶,來吧,一起來看看今天的question~
1.這是我的service
public EasyResult4FormSubmit addMaintenanceData(MaintenanceData maintenanceData) {
String tableId = maintenanceData.getTableId();
if (maintenanceDataMapper.selectByPrimaryKey(tableId) != null) {
return new EasyResult4FormSubmit(false, "表" + tableId + "維護信息已存在,新增失敗");
} else {
try{
maintenanceDataMapper.insert(maintenanceData);
}catch(Exception e){
logger.error("sql執行失敗:", e);
return new EasyResult4FormSubmit(false, "新增失敗!");
}
return new EasyResult4FormSubmit(true, "新增成功");
}
}
2.這是我的mapper.xml
@Insert({ "insert into OWL_MAINTENANCE_DATA (TABLE_ID, TABLE_NAME, ", "DATADATE_FIELD, FIELD_TYPE, ", "MAINTENANCE_TYPE, KEEP_FREQUENCY, ",
"KEEP_KINDS, TRANSIENT_TABLE, ", "BLOCK_FIELD, WORK_FLAG, ", "RUN_FLAG, DATADATE_LAST, ", "TIME_LAST)",
"values (#{tableId,jdbcType=VARCHAR}, #{tableName,jdbcType=VARCHAR}, ",
"#{datadateField,jdbcType=VARCHAR}, #{fieldType,jdbcType=VARCHAR}, ",
"#{maintenanceType,jdbcType=VARCHAR}, #{keepFrequency,jdbcType=VARCHAR}, ",
"#{keepKinds,jdbcType=VARCHAR}, #{transientTable,jdbcType=VARCHAR}, ", "#{blockField,jdbcType=VARCHAR}, #{workFlag,jdbcType=VARCHAR}, ",
"#{runFlag,jdbcType=VARCHAR}, #{datadateLast,jdbcType=VARCHAR}, ", "#{timeLast,jdbcType=VARCHAR})" })
int insert(MaintenanceData record);
3.我們來分析一下,爲什麼sql明明執行失敗而不報錯呢?
在這裏我們普及一下,通常try-catch之後我們會用兩種方法來捕獲異常:
e.printStackTrace() : 在命令行打印異常信息在程序中出錯的位置及原因,但是我不建議使用,在項目發佈後,除過不斷的刷控制檯,並沒用什麼用
logger.error("xxx錯誤/異常!", e); 使用logger.error("ExceptionName",e),可以很輕鬆的將printStackTrace()輸出到log文件中(printStackTrace()是將錯誤的堆棧信息輸出到Console中)。