Oracle db からデータを取得し、このデータを json に入れて別の場所で使用しようとしましたが、timestamptz の変換に問題があります。オラクルは、「23.10.14 18:34:16,000000 ASIA/NOVOSIBIRSK」のような文字列形式のタイムゾーンを含むタイムスタンプを提供してくれます。ここに私のコードの一部があります。
public void loadFromDb(ResultSet resultSet, Connection oc) throws SQLException {
ResultSetMetaData metaData = resultSet.getMetaData();
int columnCount = metaData.getColumnCount();
for (int i = 1; i <= columnCount; i++) {
Object obj = resultSet.getObject(i);
if (obj == null)
continue;
if (obj instanceof TIMESTAMPTZ) {
TIMESTAMPTZ ts = (TIMESTAMPTZ) obj;
if (oc != null) {
super.setValue(metaData.getColumnName(i), ts.stringValue(oc));
} else {
super.setValue(metaData.getColumnName(i), ts.stringValue());
}
}
}
そして、私はこの例外を受け取ります
java.sql.SQLException: Conversion to String failed
at oracle.sql.Datum.stringValue(Datum.java:181)
ところで、以前は「XX:XX」のような数値形式でタイムゾーンを取得していましたが、このコードも機能しませんでしたが、super.setValue(metaData.getColumnName(i), ts.stringValue(null))
この方法でこの魔法を機能させて、nullpointerexception をスローします。javadocs にあるものをすべて試したので、助けてください。