Thread: Support for JDK 1.5 RowSets
JDBC Developers,
What are your plans for supporting the upcoming JDK 1.5 including RowSets? I tried using the CachedRowSet class with the latest build of JDK 1.5 and the latest JDBC3 driver build, and ran into this error:
org.postgresql.util.PSQLException: This method is not yet implemented.
at org.postgresql.Driver.notImplemented(Driver.java:413)
at org.postgresql.jdbc3.AbstractJdbc3DatabaseMetaData.locatorsUpdateCopy(AbstractJdbc3DatabaseMetaData.java:339)
at com.sun.rowset.CachedRowSetImpl.initMetaData(CachedRowSetImpl.java:691)
at com.sun.rowset.CachedRowSetImpl.populate(CachedRowSetImpl.java:597)
at com.sun.rowset.internal.CachedRowSetReader.readData(CachedRowSetReader.java:170)
at com.sun.rowset.CachedRowSetImpl.execute(CachedRowSetImpl.java:727)
As I understand it, JDK 1.5 uses JDBC 3.0 (same as JDK 1.4). The only thing new here is the CachedRowSet. The error seems to suggest that the JDBC driver does not implement a method in the JDBC 3.0 spec that the CachedRowSet now uses.
JDBC Driver: PG7.4 Build 214 JDBC3
JDK Version: JDK 1.5.0 Beta 3 Build 55
(let me know if you'd like a code sample)
Just so you know, I have tried the CachedRowSet class in a previous JDK 1.5 build and received a different error:
org.postgresql.util.PSQLException: A result was returned when none was expected.
at org.postgresql.jdbc1.AbstractJdbc1Statement.executeUpdate(AbstractJdbc1Statement.java:275)
at com.sun.rowset.internal.CachedRowSetReader.readData(CachedRowSetReader.java:146)
at com.sun.rowset.CachedRowSetImpl.execute(CachedRowSetImpl.java:583)
at RowSetTest.testCachedRowSet1(RowSetTest.java:52)
at RowSetTest.main(RowSetTest.java:19)
I was puzzled why the executeUpdate() method was getting invoked when I was performing a SELECT. It looks like something in the CachedRowSetReader.readData() has changed (for the better?) in this newer JDK build.
Thank you,
Kevin MacClay
On Wed, 16 Jun 2004, Kevin MacClay wrote: > JDBC Developers, > > What are your plans for supporting the upcoming JDK 1.5 including > RowSets? I tried using the CachedRowSet class with the latest build of > JDK 1.5 and the latest JDBC3 driver build, and ran into this error: > > org.postgresql.util.PSQLException: This method is not yet implemented. > at org.postgresql.Driver.notImplemented(Driver.java:413) > at > org.postgresql.jdbc3.AbstractJdbc3DatabaseMetaData.locatorsUpdateCopy(Ab > stractJdbc3DatabaseMetaData.java:339) The locatorsUpdateCopy method describes how LOBs are updated, but in the pg driver LOBs aren't updateable at all. If your code is using JDBC large objects you're in trouble, but it's possible that the rowset implementation is just probing the driver for all possible attributes. Could you retest with a version that I've changed to return true for this method? I've put up a jar file here: http://www.ejurka.com/pgsql/jars/ Kris Jurka
On Wed, 16 Jun 2004, Kris Jurka wrote: > The locatorsUpdateCopy method describes how LOBs are updated, but in the > pg driver LOBs aren't updateable at all. If your code is using JDBC large > objects you're in trouble, but it's possible that the rowset > implementation is just probing the driver for all possible attributes. > > Could you retest with a version that I've changed to return true for this > method? I've put up a jar file here: > > http://www.ejurka.com/pgsql/jars/ > > Kris Jurka This worked! I also tested updating back to the database with the CachedRowSet, and that worked as well. Will this change make it into the next driver build? I will do some more extensive testing of the JDK 1.5 RowSet classes this week and let you know if I spot any other incompatibilities. Thank you, Kevin
On Wed, 16 Jun 2004, Kevin MacClay wrote: > On Wed, 16 Jun 2004, Kris Jurka wrote: > > > Could you retest with a version that I've changed to return true for > > this method? I've put up a jar file here: > > > > http://www.ejurka.com/pgsql/jars/ > > This worked! I also tested updating back to the database with the > CachedRowSet, and that worked as well. Will this change make it into > the next driver build? I've made this change in both the 7.4 and 7.5 cvs trees. Kris Jurka
Hi Kevin, all, Thanks for pointing these problems out! We are already aware of these problems and these will be fixed in the next release of Tiger. One point to note here is that we would like adoption of technology by industry/vendors as it gets stabilised. It's been roughly 3 years since JDBC 3.0 came out and we are getting ready for next release http://www.jcp.org/en/jsr/detail?id=221 All said, once again, we are aware of problems stated below and trying to see how we can help the developer community and industry leverage the new API's as they come. thanks, Amit Handa, Sun Microsystems Inc. Kevin MacClay wrote: > JDBC Developers, > > What are your plans for supporting the upcoming JDK 1.5 including > RowSets? I tried using the CachedRowSet class with the latest build of > JDK 1.5 and the latest JDBC3 driver build, and ran into this error: > > org.postgresql.util.PSQLException: This method is not yet implemented. > at org.postgresql.Driver.notImplemented(Driver.java:413) > at > org.postgresql.jdbc3.AbstractJdbc3DatabaseMetaData.locatorsUpdateCopy(AbstractJdbc3DatabaseMetaData.java:339) > > at > com.sun.rowset.CachedRowSetImpl.initMetaData(CachedRowSetImpl.java:691) > at > com.sun.rowset.CachedRowSetImpl.populate(CachedRowSetImpl.java:597) > at > com.sun.rowset.internal.CachedRowSetReader.readData(CachedRowSetReader.java:170) > > at > com.sun.rowset.CachedRowSetImpl.execute(CachedRowSetImpl.java:727) > > As I understand it, JDK 1.5 uses JDBC 3.0 (same as JDK 1.4). The only > thing new here is the CachedRowSet. The error seems to suggest that the > JDBC driver does not implement a method in the JDBC 3.0 spec that the > CachedRowSet now uses. > > JDBC Driver: PG7.4 Build 214 JDBC3 > JDK Version: JDK 1.5.0 Beta 3 Build 55 > (let me know if you'd like a code sample) > > Just so you know, I have tried the CachedRowSet class in a previous JDK > 1.5 build and received a different error: > > org.postgresql.util.PSQLException: A result was returned when none was > expected. > at > org.postgresql.jdbc1.AbstractJdbc1Statement.executeUpdate(AbstractJdbc1Statement.java:275) > > at > com.sun.rowset.internal.CachedRowSetReader.readData(CachedRowSetReader.java:146) > > at > com.sun.rowset.CachedRowSetImpl.execute(CachedRowSetImpl.java:583) > at RowSetTest.testCachedRowSet1(RowSetTest.java:52) > at RowSetTest.main(RowSetTest.java:19) > > I was puzzled why the executeUpdate() method was getting invoked when I > was performing a SELECT. It looks like something in the > CachedRowSetReader.readData() has changed (for the better?) in this > newer JDK build. > > Thank you, > Kevin MacClay >