java中try-catch的使用和併發問題

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中)。

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章