2016-08-25 41 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