以下のような質問があります。
SELECT COL1, COL2 FROM SCHEM1.TAB1 WHERE COL3=? AND COL4=?
上記のクエリを Java クラスで次のように実行しています。
List<Map<String, Object>> resultList = jdbcTemplate.queryForList(sql, (Object[]) queryParams);
問題はqueryParams
、次のようにテキスト プロパティ ファイルから実行時に取得していることです。
2013-03-28||helloWorld
上記の行に見られるように、プロパティ ファイルには sql への引数があります。すべての引数は二重パイプで区切られます。
String[]
パイプ区切り文字で split メソッドを使用して、この行を に読み込んでいます。
したがって、結果のqueryParams
文字列配列は次のようになります。
String[]
queryParams
どこにいて、どこにString[0]
いるだろう2013-03-28
String[1]
helloWorld
この投稿の冒頭で述べたように、これをキャストしString[]
てテンプレート メソッドに直接渡しているときに、log4j がモードに設定されていると、次のエラーで終了します。queryForList
Object[]
debug
Exception in thread "main" java.lang.Error: SQLWarning chain holds value that is not a SQLWarning
at java.sql.SQLWarning.getNextWarning(SQLWarning.java:91)
at org.springframework.jdbc.core.JdbcTemplate.handleWarnings(JdbcTemplate.java:1260)
at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:587)
at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:636)
at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:665)
at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:673)
at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:713)
at org.springframework.jdbc.core.JdbcTemplate.queryForList(JdbcTemplate.java:796)
at com.hsbc.pb.it.re.db.dao.impl.ReconDaoImplNew.getColumnList(MyClass.java:362)
コンソールのこのエラーのすぐ上の行に、次のように記載されています。
SQLWarning ignored: SQL state 'null', error code '0', message [Input data type mismatch, see chained exceptions; will retry execution using describe input information. Please change application to use an input data type that matches the database column type as required by JDBC semantics.]
ただし、log4j レベルを に設定すると、このコードは正しく機能しinfo
ます。
この終了の原因は何ですか?
それを解決する方法?
それはパラメーターの型と関係がありますか (予想される列が Date の場合、String を queryForList に渡しています) ? queryForList
もしそうなら、メソッドに渡す前に String を期待される型に正しくフォーマットするにはどうすればよいですか?
プロパティ ファイルを次のように変更できます。
2013-06-28,DATE||helloWorld,VARCHAR
値の型に関する情報も渡されます。しかし、この情報を使用して、文字列を特定の型に変換するにはどうすればよいですか?そのようなアプローチは良い解決策ですか?
log4j がinfo
モードのときにエラーが発生しないのはなぜですか?
読んでくれてありがとう!
詳細が不足している場合はお知らせください。