2016-08-25 3 views
1

informix DB에서 Java 데이터 객체로 데이터를 추출하는 스프링 배치/부팅 응용 프로그램을 작성하고 있지만 java.sql.SQLException을 찾을 수 없습니다. 해당 열 이름 문제가 없습니다.스프링 부트 - 해당 열 예외가 없음

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' "; 

테이블 열 값 3에서 35 범위 칼럼 크기 유형 CHAR 모두 같습니다

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 의해 실행되는 쿼리이다

는 방법이다.

데이터 개체 속성은 모두 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_postal_code" + "cad_postal_cd_4") 
+0

당신에게 어떤 선생님 감사합니다

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

당신이있어 동일한 문제가 :

는 다음과 같은 의미입니까?. 나는 당신의 대답을 받아 들일 것입니다. 다른 질문을하는 것에 신경 쓰지 않는다면,이 메소드에서 아이템 객체를 어떻게 사용하고 있는지/설정하는 것이 맞습니까? 이 오류가 수정되었지만 여전히 파일에 쓰여지지 않고 있으므로 변경 사항이 항목을 작성자에게 전달하는 항목 프로세서로 되돌려 보내지 않는다고 생각합니다. – throwawaydev

+0

사실, 아니요. 'item'을 전달합니다. 그런 다음,'myJdbcTemplate.queryForObject' 메쏘드에서'item'을 변형시키고 반환 값을 무시하십시오. 그런 다음 동일한 'item'을 반환합니다. 모두 매우 혼란 스럽습니다. 나는 당신이 실제로 어떤 대상을 당신이 방법에 대해, 어떤 대상을 돌연변이시키고 있는지 그리고 당신이 무엇을 돌려주고 있는지에 대해 생각할 필요가 있다고 생각합니다. 나는'int userId'와'return myJdbcTemplate.queryForObject'를 받아들이도록 메소드를 재 작성하는 것이 좋습니다. –

+0

다시. 그들을 다시 전달하고 개체를 반환하는 메서드를 호출하는 새 초기화를 사용하여 작동합니다. int를 전달하는 것에 대해 생각할 필요가 있지만 조언에 감사드립니다. 잘 가라 앉아서 연못 건너편에서. – throwawaydev

관련 문제