私は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
への読み込みを除いて、まったく同じことをする別のメソッドが完全に機能するからです。
助けてください。
はあなたに優しい先生ありがとうございました。私はあなたの答えをただちに受け入れるでしょう。別の質問をしても構わない場合は、このメソッドでアイテムオブジェクトをどのように使用/設定していますか?これで、エラーは修正されましたが、まだファイルに書き込まれていないので、アイテムプロセッサに渡した変更が作者に戻っていないと思います。 – throwawaydev
実際はそうではありません。あなたは 'item'を渡します。次に、 'myJdbcTemplate.queryForObject'メソッドで' item'を変更し、戻り値を無視します。同じ 'item'を返します。それはすべて非常に混乱しています。私はあなたが実際にどのようなオブジェクトを受け取っているのか、どのオブジェクトを変異させているのか、どのようなものを返すのか、本当に考える必要があると思います。 'int userId'と' return myJdbcTemplate.queryForObject'を受け入れるようにメソッドを書き直すことをお勧めします。 –
もう一度。新しいDOを作成してそれを戻し、オブジェクトを返すメソッドを呼び出す際に再初期化を行っています。 intを渡すことについて考える必要がありますが、私はアドバイスを感謝します。池を横切ってグッドナイト。 – throwawaydev