2016-08-25 25 views
1

我正在寫一個Spring批處理/啓動應用程序提取數據從一個informix數據庫到Java數據對象,但我不知道java.sql.SQLException:沒有這樣的列名稱問題。春季啓動 - 沒有這樣的列例外

這是方法:

public UserDo getUserAddress(UserDo item) { 
    try { 
     myJdbcTemplate.queryForObject(getUserAddressQuery, new RowMapper<UserDo>() { 
      @Override 
      public UserDo mapRow(ResultSet rs, int arg1) throws SQLException { 
       try { 
        item.setAddressLine1(rs.getString("cad_add_line_1")); 
        item.setAddressLine2(rs.getString("cad_add_line_2" + "cad_add_line_3" + "cad_add_line_4")); 
        item.setCity(rs.getString("cad_city_name")); 
        item.setState(rs.getString("cad_ste_prv_cd")); 
        item.setZip(rs.getString("cad_postal_code" + "cad_postal_cd_4")); 
        item.setCountry(rs.getString("cad_country_code")); 
       } catch (SQLException sqle){ 
        logger.error(sqle.getMessage(), sqle); 
       } 
       return item; 
      } 
     }, item.getUserId()); 
    } catch (EmptyResultDataAccessException erdae) { 
     logger.error(erdae.getMessage(), erdae); 
    } catch (IncorrectResultSizeDataAccessException irsdae) { 
     logger.error(irsdae.getMessage(), irsdae); 
    } 
    return item; 
} 

這是通過JdbcTemplate正在執行的查詢:

private final String getUserAddressQuery = "select cad_add_line_1, cad_add_line_2, cad_add_line_3, cad_add_line_4, cad_city_name, cad_ste_prv_cd, cad_postal_code, cad_postal_cd_4, cad_country_code, cad_county_parrish " 
     + "from user_address " 
     + "where user_id = ? " 
     + "and user_type_code = '03' "; 

表列值都與柱大小從335類型CHAR的。

數據對象屬性都是String類型。

該方法從我的ItemProcessor調用。

ResultSet當我使用調試器時,對象顯示爲空。我認爲問題是從informix CHAR讀到Java String。這是因爲除了從informix INTEGER到Java int閱讀外,其他方法完全相同,完美地工作。

請幫忙。

回答

5

你的問題就在這裏:

rs.getString("cad_add_line_2" + "cad_add_line_3" + "cad_add_line_4") 

這將編譯到:

rs.getString("cad_add_line_2cad_add_line_3cad_add_line_4") 

,我強烈懷疑不存在這樣的列。


您是不是要找:

rs.getString("cad_add_line_2") 
+ rs.getString("cad_add_line_3") 
+ rs.getString("cad_add_line_4") 

你這裏有完全一樣的問題:

rs.getString("cad_postal_code" + "cad_postal_cd_4") 
+0

謝謝指點先生。我會盡快接受你的回答。如果你不介意我問另一個問題,我是如何使用/設置該方法中的項目對象好嗎?這固定了錯誤,但它仍然沒有寫入文件,所以我認爲這些更改並沒有讓它回到將項目傳遞給作者的項目處理器。 – throwawaydev

+0

不是,不。你傳入一個'item'。然後,您在'myJdbcTemplate.queryForObject'方法中改變'item',並忽略返回值。你然後返回相同的'項目'。這一切都很困惑。我認爲你需要真正考慮你正在接受的方法,你正在改變什麼對象以及你正在返回什麼。我建議重寫方法來接受一個'int userId',然後'返回myJdbcTemplate.queryForObject'。 –

+0

再說一次。使用創建新的DO將它們傳回並在調用方法中重新初始化以返回對象正在工作。需要考慮傳遞整數,但我很欣賞這些建議。晚安從池塘旁邊。 – throwawaydev