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