Newsgroup: it.comp.java
Titolo: Maledetto JDBC!!

Ho fatto un semplicissimo programmino che prende il ResultSet ottenuto da
una executeQuery(String SQL) e _cerca_ di scorrere i dati. dico "cerca"
perchè lo scorrimento sembra a senso unico, cioè il metodo next() funziona,
ma il previous() solleva una UnsupportedOperationException.
Sulla documentazione c'è la descrizione del funzionamento del metodo, ma c'è
anche scritto (come nella maggior parte degli altri metodi, escluso next())
"JDBC 2.0"
Suppongo quindi che il metodo non sia implementato nella mia versione del
JDBC e che sia disponibile a partire dalla versione 2.0 (che sistema!!!).
Sapete se è in circolazione questa 2.0 del JDBC?
In caso contrario avete idea di come possa "indietreggiare" di una riga,
considerando che anche il metodo first() e il relative(int) non sono
implementati?
Daniele

 wrote in message
1Gdw4.68474$qv.6...@news.infostrada.it...

Ciao Daniele, provo a risponderti:
Il fatto che tu abbia nella documentazione la descrizione dei metodi
di JDBC 2.0 mi fa pensare che possiedi SDK 1.2 o 1.2.2;
questo vuol dire che tu hai già JDBC 2.0,  ma, come credo che tu
sappia, JDBC è prevalentemente un insieme di interfacce,
tra le quali c'è l'interfaccia ResultSet. Quindi  ciò che ti manca è
l'implementazione di codeste interfacce da parte del driver che
utilizzi per la connessione al database. Deduco quindi che tu stia
usando come driver il bridge JDBC-ODBC fornito a corredo della
piattaforma Java.
Se le mie supposizioni sono esatte allora il problema risiede proprio
nel bridge JDBC-ODBC in quanto in questa versione, i metodi nuovi di
JDBC 2.0 non sono stati implementati e giustamente la chiamata ad uno
di essi ti restituisce quel tipo di eccezione.
Le soluzioni sono diverse e te le elenco brevemente:
1) Usi un driver ad hoc per il DBMS al quale ti connetti, (ad esempio
Sybase ha implementato JDBC 2.0 nel driver jConnect 5.2) e in questo
caso, alla pagina 
http://www.java.sun.com/products/jdbc/drivers.html
trovi una lista completa di tutte le aziende che hanno sviluppato dei
driver JDBC.
2) Ti scarichi la release candidate 1 del SDK 1.3.0, nella quale JDBC
2.0 è implementato e quindi puoi muovere il cursore all'interno del
ResultSet nei due sensi tornare all'inizio eccetera;
3) Ti scarichi dal sito di java i seguenti componenti:
- l'estensione standard di JDBC 2.0
(
http://www.java.sun.com/products/jdbc/download.html
) ;
- la classe CachedRowSet
(
http://developer.java.sun.com/developer/earlyAccess/crs/
 );
Per fare il download di quest'ultino hai comunque bisogno di essere
registrato (è gratis) al java developer connection
http://developer.java.sun.com/developer/
 .
Quest'ultima soluzione ti permette un'altra cosa interessante oltre
all'utilizzo di JDBC 2.0 e cioè la possibilità di lavorare sul
resultset a connessione chiusa usando proprio la classe CachedRowSet
al posto di ResultSet: dopo l'esecuzione della query "svuoti" il
resultset nella classe CachedRowSet con il metodo populate(ResultSet)
e ti sconnetti dal database.
Scusa la logorrea.
Spero solo di non averti incasinato ulteriormente.
Corrado.


Grazie mille!! mi sei stati di grande aiuto!!
Daniele

 
http://developer.java.sun.com/developer/
 .
...
ok, ho scaricato e "integrato" le nuove classi, inclusa la CachedRowSet. Ho
letto quà e là la documentazione ed ho visto che è proprio quello che mi
serviva, ma adesso ho un altro problemino:
la semplicissima riga:
     CachedRowSet crs = new CachedRowSet();
mi genera un errore di runtime:
java.lang.NoClassDefFoundError: javax/naming/NamingException
 at sun.jdbc.rowset.CachedRowSet.<init>(CachedRowSet.java:339)
 at Runner.<init>(Runner.java:20)
 at Runner.main(Runner.java:141)
dove Runner è la mia classe.
da quello che dice sembra che manchi questa classe NamingException e forse
anche tutto il package "naming".
Sai per caso da che altro può dipendere il problema e se è possibile
scaricare anche quest'altro package?
Stasera provo comunque ad andare al java developer connection ed a cercarlo.
Grazie, Daniele

 Grazie, Daniele
L'unica cosa che posso dirti č che quel package (e quindi quella
classe/Eccezione)fa parte della piattaforma enterprise di sviluppo Java
(J2EE), e che l'estensione standard a JDBC 2.0 (quella che ti ho fatto
scaricare insieme a CachedRowSet per intenderci) č parte di quella
piattaforma, ma č utilizzabile anche con la Standard Edition (J2SE);
difatti č la soluzione che sto utilizzando anch'io senza problemi
e ...senza package javax.naming :)
Mi spiace ma non so dirti altro.
Se vuoi, fammi sapere come si evolve la questione, anche in privato.
Ciao, Corrado.
Sent via Deja.com 
http://www.deja.com/
Before you buy.

 Sapete se è in circolazione questa 2.0 del JDBC?
Da quello che so il jdbc2.0 dovrebbe uscire con il jdk1.1.3
- Luca Giuranna -