Thread: Support for JDK 1.5 RowSets

Support for JDK 1.5 RowSets

From
"Kevin MacClay"
Date:

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

Re: Support for JDK 1.5 RowSets

From
Kris Jurka
Date:

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

Re: Support for JDK 1.5 RowSets

From
"Kevin MacClay"
Date:
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

Re: Support for JDK 1.5 RowSets

From
Kris Jurka
Date:

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

Re: Support for JDK 1.5 RowSets

From
Amit Handa
Date:
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
>