2016-08-25 12 views
1

私はSpringのバッチ/ブートアプリケーションを使ってinformix DBからjavaデータオブジェクトにデータを抽出していますが、java.sql.SQLExceptionを見つけることはできません。Springブート - そのような列の例外はありません

これは方法であって

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

テーブルの列の値は3から35の範囲の列サイズとタイプ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'を変更し、戻り値を無視します。同じ 'item'を返します。それはすべて非常に混乱しています。私はあなたが実際にどのようなオブジェクトを受け取っているのか、どのオブジェクトを変異させているのか、どのようなものを返すのか、本当に考える必要があると思います。 'int userId'と' return myJdbcTemplate.queryForObject'を受け入れるようにメソッドを書き直すことをお勧めします。 –

+0

もう一度。新しいDOを作成してそれを戻し、オブジェクトを返すメソッドを呼び出す際に再初期化を行っています。 intを渡すことについて考える必要がありますが、私はアドバイスを感謝します。池を横切ってグッドナイト。 – throwawaydev

関連する問題