0
0

DB操作を行う機能で「Bad value for type long」が出た際の原因と解決策

Last updated at Posted at 2024-04-19

事象

Webアプリケーションのある機能で例外が発生し、ログを確認すると「Bad value for type long」と出力されている。
この機能はDB操作を伴う機能であるため、発行したSQLをデバッグしてみたところ正常に動作し、SQL自体は間違ってなさそうなことが分かっている。

解決策

DBにTimestampで定義されているカラムをUNIX秒(Long型)で取得したい場合
SQL発行後にまずはjava.sql.ResultSet.getTimestamp()で値を取得する。
その後、java.sql.Timestamp.getTime()を呼び出して、java.sql.Timestamp型からLong型のUNIX秒に変換することができる。

修正後
Long lUnixTime = resultSet.getTimestamp("DATETIME").getTime();

原因

アプリケーション内でDBへのSELECT文発行結果を取得する部分のコードに問題があった。
DB内にTimestamp型で格納されているカラムに対してresultSet.getLong()してたことが原因であった。

修正前
Long lUnixTime = resultSet.getLong("DATETIME");

上記のコードでは、タイムスタンプをUNIX秒に変換して取得したかったのでgetLong()を呼び出しているが、
この方法では例外が発生したため、実装の修正が必要であった。

ログ出力されたBad value for type longを検索してみたところ、SQLExceptionによるものだということが分かった(SQLExceptionが握りつぶされていることも分かった)。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0