在使用Spring的時候,數據庫訪問相關的操作都是通過Spring的JdbcTemplate解決的,除了要碼sql語句,還要填充Bean對象之外.在這個過程中,我使用了JdbcTemplate的幾個方法,其中在使用queryForObject方法時,發現了一個錯誤.
private static final String SQL_SELECT_INSCHARACTER = " SELECT st_inscharactername " + " FROM wm05_m_comp_inscharacter "+ " WHERE id_product = :productiD " + " AND id_company = :companyiD " + " AND id_abicdif = :abicfundId " + " AND id_inscharacter = :inscharacterId ";
public String getInsCharacter(String productId, String companyId, String abicfundId, String inscharacterId) { Object[] params = new Object[] { productId, companyId, abicfundId, inscharacterId }; String stinscharactername = getJdbcTemplate().queryForObject(SQL_SELECT_INSCHARACTER, params, String.class); if (!StringUtil.isEmpty(stinscharactername)) { return stinscharactername; } else { return "保証利率(%)"; } }
queryForObject 方法需要傳入三個參數,第一個參數是該方法需要執行的SQL語句。
數組params為執行動態SQL時需要傳入的參數,參數順序與SQL中的參數順序相同。
最后一個參數是返回值的類型(只能是基本數據類型的封裝類,如Integer、String)
如果想使用自定義的類型的返回值:new BeanPropertyRowMapper(StoreDto.class) (當POJO對象和數據看表字段完全對應或駝峰式與下划線對應時BeanPropertyRowMapper類會根據構造函數中的class來自動填充數據。)
需要注意的是:queryForObject方法默認返回值不為空,如果可以肯定結果集不為空可以不做處理,否則需要用
try……catch代碼塊進行異常的捕獲與處理。
public String getInsCharacter(String productId, String companyId, String abicfundId, String inscharacterId) { try { Object[] params = new Object[] { productId, companyId, abicfundId, inscharacterId}; String stinscharactername = getJdbcTemplate().queryForObject(SQL_SELECT_INSCHARACTER, params, String.class); if(!StringUtil.isEmpty(stinscharactername)){ return stinscharactername; } } catch (DataAccessException e) { return "保証利率(%)"; } return "保証利率(%)"; }