[pgsql-jp: 29424] Re: JDBCのprevious メソッドでNullPointerException が発生します
bxcel
bxcel @ prophet.jp
2003年 3月 16日 (日) 22:50:34 JST
松本です。
再現させる事が出来ましたので報告します。
テスト用データベース作成
------------ここから-------------------
test=# CREATE TABLE test (id int);
CREATE TABLE
test=# INSERT INTO test VALUES(1);
INSERT 956362 1
test=# INSERT INTO test VALUES(2);
INSERT 956363 1
test=# INSERT INTO test VALUES(3);
INSERT 956364 1
------------ここまで-------------------
テストプログラム(previous.java)
------------ここか
ら-------------------------------------------------------------
import java.io.*;
import java.sql.*;
public class previous {
public static void main(String arg[]) throws Exception {
Connection con = null;
Statement stmt = null;
ResultSet rs = null;
Class.forName("org.postgresql.Driver");
con = DriverManager.getConnection("jdbc:postgresql://localhost/test"
, "postgres", "password");
stmt = con.createStatement();
rs = stmt.executeQuery("SELECT id FROM test ORDER BY id");
rs.afterLast();
while( rs.previous() ){
System.out.println(rs.getString("id"));
}
return;
}
}
------------ここま
で-------------------------------------------------------------
$ java previous
Exception in thread "main" java.lang.NullPointerException
at java.lang.System.arraycopy(Native Method)
at
org.postgresql.jdbc2.AbstractJdbc2ResultSet.previous(AbstractJdbc2ResultSet.
java:480)
at previous.main(previous.java:19)
rs.afterLast()をrs.last()に変更すると発生しませんが、この方式では
当然ながら最終レコードが処理できません。
$ java previous
2
1
プログラムで対処可能なのですがご報告まで。
と、ここまで書いて思ったのでずか、afterLastの位置からprevious
メソッドは実行してはいけないのでしょうか?
レコードセットを取得した状態はbeforeFirstの位置でありnext
メソッドを呼び出してから処理を行なうので問題ないと考えてい
ました。
> 松本と申します。
>
> PostgreSQL7.3用のJDBCドライバについて教えてください。
>
> 環境
> JDK 1.3.1_06-b01
> PostgreSQL7.3.2
> RedHat Linux 7.2
> jakarta-tomcat-4.0.6
>
> http://jdbc.postgresql.org/download.html
> からJDBCドライバ(pg73jdbc2.jar)をダウンロードしました。
>
> JDBCで接続してpreviousメソッドを実行すると
>
> java.lang.NullPointerException
> at java.lang.System.arraycopy(Native Method)
> at
> org.postgresql.jdbc2.AbstractJdbc2ResultSet.previous(AbstractJdbc2
> ResultSet.
> java:480)
>
> が発生します。pg73jdbc2ee.jarでも同様の現象でした。
>
> 試しにPostgreSQLは7.3.2のままで7.2用のJDBCドライバ
> (pg72jdbc2.jar)で確かめてみると、正しく動作しました。
>
> 同様の現象で対策された情報をお持ちの方、及び
> PostgreSQL7.3.2と7.2用JDBCドライバの運用で問題に
> 遭遇された情報をお持ちの方いらっしゃいましたら
> 教えて頂きたくお願い申し上げます。
pgsql-jp メーリングリストの案内