PgSQL JDBC chyba?
"Zíka Aleš, Ing."
Ales.Zika na pel.br.ds.mfcr.cz
Středa Listopad 19 08:31:48 CET 2003
Zdravim,
hraju si s JDBC na PgSQL a narazil jsem na nasledujici problem.
Tento fragment kodu
Statement stmt = con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,
ResultSet.CONCUR_READ_ONLY);
ResultSet rs = stmt.executeQuery("SELECT name FROM names");
rs.afterLast();
while (rs.previous())
System.out.println(rs.getString(1));
vyhazuje na radku "while (rs.previous())" vyjimku
Exception in thread "main" java.lang.NullPointerException
at java.lang.System.arraycopy(Native Method)
at
org.postgresql.jdbc2.AbstractJdbc2ResultSet.previous(AbstractJdbc2ResultSet.
java:484)
at Cursor2.main(Cursor2.java:25)
Pokud vynecham radek "rs.afterLast();", tak to probehne korektne,
ale samozrejme to nic nevypise.
Experimentalne jsem zjistil, ze chyba se da obejit treba takto:
ResultSet rs = stmt.executeQuery("SELECT name FROM names");
rs.next();
rs.afterLast();
while (rs.previous())
Proste pred "rs.afterLast();" udelat jeste nejaky pohyb v
ResultSetu, nemusi to byt jen "rs.next();", pomaha i takova blbost jako
"rs.relative(-1);", kdy kurzor stale zustava pred prvnim radkem.
Mam pocit, ze pokud se jako prvni prikaz po inicializaci ResultSetu
pouzije afterLast(), tak uvede ResultSet do nejakeho nekonzistentnim stavu a
volani previous() vyhazuje vyjimku (next() kupodivu nikoliv), pokud se
predtim provede nejaky jiny prikaz, tak uz to nedela.
Zkousel jsem to jak s originalnim postgresql.jar, ktery je soucasti
distribuce, tak s poslednim pg73jdbc3.jar stazenym i Internetu, chova se to
stejne. Platforma: W2kCZ + Cygwin + PgSQL 7.3.4 a Java 1.4 for Windows:
Delam neco blbe ja, nebo je to chyba JDBC?
Diky,
Ales Zika
CSE Spoje Pelhrimov
http://results.cz
e-mail: Ales.Zika na pel.br.ds.mfcr.cz
Ales.Zika na seznam.cz
Další informace o konferenci Test