2012年1月11日水曜日

Java JDBCのエラー ローにありません

SQL Anywhere 12 にJavaからiAnywhere JDBC ドライバ(ianywhere.ml.jdbcodbc.jdbc3.IDriver)で接続しSELECT文を実行、結果を読むところで「ローにありません」というエラーが出た。


Caused by: java.sql.SQLException: ローにありません。
at ianywhere.ml.jdbcodbc.jdbc3.IIResultSet.getInt(Native Method)
at ianywhere.ml.jdbcodbc.jdbc3.IResultSet.getInt(IResultSet.java:464)
... 2 more


まったく意味がわからないメッセージなので、どうしたものかと思い該当部分のコードを見る。


ResultSet rs = statement.executeQuery();
int n = rs.getInt(1); // ← ここでSQLException
rs.close();


結果を一行しか返さないSQL文だったのですっかり油断していた。

原因はResultSet.next()が抜けていただけでした。

正しくは…


ResultSet rs = statement.executeQuery();
int n;
if (rs.next()) {
n = rs.getInt(1);
}
rs.close();


これに気づく間、SQLを変えてみたり試行錯誤してました。
適切なエラーメッセージはとても大事です。

0 件のコメント:

コメントを投稿