Newsgroup: it.comp.java
Titolo: ...maledetto jdbc:odbc !!!

Rieccomi di nuovo qui per i soliti problemi di java.sql
Chi può aiutarmi a risolvere questo problemino?!?!
Sto preparando una paginetta JSP che deve gestirmi una Base di Dati...
...funziona tutto tranne una cosa...
Come faccio per prelevare dal database i nomi dei campi di una tabella senza
eseguire nessuna query?!
Mi spiego meglio...
...questa paginetta, dopo che si è collegata al database, deve prendere le
informazioni "fisiche" di quest'ultimo, quali il nome dei campi, i tipi di
campi, la chiave primaria,....
...e automaticamente deve costruirmi una form di immissione dati, la quale
poi passerà tutte le informazioni inserite ad un'altro modulo per
l'inserimento nel database...
...e tutto questo mi serve per rendere la JSP indipendente dal database (o
per lo meno il database deve rispettare solo alcune piccoli convenzioni)...
...cioè per dirlo in breve, la stessa pagina vorrei usarla per aggiornare
una rubrica telefonica, un catalogo di videocassette, di CD musicali...senza
cambiare una riga di codice!!!
Il tutto funziona se eseguo una query (tipo SELECT * FROM catalogo) e poi
tramite ResultSetMetaData e tutti i suoi buoni metodi mi costruisco quello
che mi serve...
...però questa soluzione mi sembra brutta e poco efficiente...infatti nel db
deve esserci almeno un record, e se il database contiene un miliardo di
record ogni volta deve prelevarmi tutto...
Vi prego aiutatemi...
Amedeoz.

 eseguire nessuna query?!
DatabaseMetaData può aiutarti.
Ciao,
 Stefano
----------
"X WindowSSS, teSSSoro mio... lo odieremo per SSSempre"
Bill Gollum
----------

Infatti...
...sono circa 8 ore che ci provo senza risultati....
...xchè a me non funge?!
Amedeoz.

Amedeoz wrote:

Perchè non sei alto bello biondo e con gli occhi azzurri; devi sapere
infatti che il JDK è sensibile a queste cose. Scherzi a parte, potresti
postare un pezzetto del codice che non ti funziona, qualcuno troverà
eventuali sviste. Così come lo chiedi è un po' difficile spiegarti
perchè qualcosa non funzioni...


...infatti...
...sono moro e non troppo alto... :)
Cmq ora provo a postarvi un frammento dei circa 3000 tentativi che ho
fatto...
1)
    String drv = "sun.jdbc.odbc.JdbcOdbcDriver";
    String dbase = "jdbc:odbc:paper";
    Class.forName(drv);
    Connection con=DriverManager.getConnection(dbase, " ", " ");
    DatabaseMetaData dbmd = con.getMetaData();
    ResultSet rs = dbmd.getColumns("","","","");
     ^---Errore!!!
l'errore che mi da è :
java.sql.SQLException: [Microsoft][ODBC Microsoft Access 97 Driver]Driver
not capable
 at java.lang.Throwable.(Compiled Code)
 at java.lang.Exception.(Compiled Code)
 at java.sql.SQLException.(SQLException.java:43)
 at sun.jdbc.odbc.JdbcOdbc.createSQLException(Compiled Code)
 at sun.jdbc.odbc.JdbcOdbc.standardError(JdbcOdbc.java:3814)
 at sun.jdbc.odbc.JdbcOdbc.SQLColumns(JdbcOdbc.java:785)
 at
sun.jdbc.odbc.JdbcOdbcDatabaseMetaData.getColumns(JdbcOdbcDatabaseMetaData.j
ava:2551)
 at pagecompile.jsp._prove._update2._jspService(Compiled Code)
 at
com.sun.server.http.pagecompile.jsp.runtime.HttpJspBase.service(HttpJspBase.
java:87)
 at javax.servlet.http.HttpServlet.service(HttpServlet.java:840)
 at
com.sun.server.http.pagecompile.jsp.runtime.JspServlet.runServlet(JspServlet
.java:469)
 at
com.sun.server.http.pagecompile.jsp.runtime.JspServlet.processJspPage(JspSer
vlet.java:259)
 at
com.sun.server.http.pagecompile.jsp.runtime.JspServlet.service(JspServlet.ja
va:97)
 at javax.servlet.http.HttpServlet.service(HttpServlet.java:840)
 at com.sun.server.ServletState.callService(ServletState.java:226)
 at
com.sun.server.ServletManager.callServletService(ServletManager.java:936)
 at
com.sun.server.ProcessingState.invokeTargetServlet(ProcessingState.java:423)
 at
com.sun.server.http.HttpProcessingState.execute(HttpProcessingState.java:79)
 at com.sun.server.http.stages.Runner.process(Runner.java:79)
 at com.sun.server.ProcessingSupport.process(Compiled Code)
 at com.sun.server.Service.process(Service.java:204)
 at
com.sun.server.http.HttpServiceHandler.handleRequest(HttpServiceHandler.java
:374)
 at com.sun.server.http.HttpServiceHandler.handleRequest(Compiled Code)
 at com.sun.server.HandlerThread.run(Compiled Code)
Probabilmente non so usare il getColumns, il fatto è che la documentazione
(della sun) fa veramente schifo!!!
Ringrazio anticipatamente chiunque ha un'idea...
Bye....

 not capable
Mi dispiace informarti che purtroppo... non puoi usare il driver JDBC-ODBC M$
per ottenere informazioni sul DataBaseMetaData, perchè come vedi dall'eccezione
non ne è in grado! Occorrerebbe andare su un db serio, non sul giocattolo M$.
Purtroppo ci sono incappato anche io, e l'unica soluzione che trovai al tempo è
quella di fare una query che ti riporti il minimo risultato possibile, ad
esempio potresti impostare il maxrows a 1 e fare un select * from
latabellachetiinteressa. In questo modo l'operazione dovrebbe essere abbastanza
veloce (prende la prima riga della tabella, dalla quale puoi ottenere comunque
tutte le informazioni sulla tabella via ResultSetMetaData).
In alternativa, considera la possibilità di cambiare db.


La soluzione da te indicata è quella che io volevo assolutamente evitare,
cmq se è l'unica soluzione...
...dato che siamo in tema, che DB mi consigli di usare, io ho provato quello
di IDS, ma non sono riuscito a farlo funzionare... (questo sempre xchè non
sono biondo, tantomeno alto :p )..Grazie cmq del tempo che hai perso per
me...
ByezZzZzZ...
Amedeoz

possibile, 
Un trucco tipico e' usare una cosa tipo:
select * from <tabella> where 1=0
-- 
God is Real, unless declared Integer.
ObjectZone - 
http://space.tin.it/computer/csadun/

 select * from <tabella> where 1=0
Non ci avevo mai pensato... anche perchč temevo che in caso di result set
vuoto si potesse incasinare qualcosa specie con la M$. Ma se lo suggerisci
tu, allora posso dormire tra 2 guanciali. ;)


 di IDS, ma non sono riuscito a farlo funzionare...
Ce ne sono parecchi; potresti cominciare col provare Interbase della Borland; in
alternativa PostgreSQL o MySQL; specie se vuoi provare qualcosa per conto tuo
senza spendere $$$. Altrimenti si va sui mostri tipo DB2 o Oracle...


tu, allora posso dormire tra 2 guanciali. ;)
Dovrebbe essere garantito dalla semantica di SQL89/92 - nel "where" ci va 
una condizione booleana e una condizione costantemente falsa ne e' 
semplicemente un caso particolare. Quindi se non funzionasse, e' un errore 
di implementazione. ;-) Con MS SQL server funziona, comunque, cosi' come 
con db2 e oracle, e mi pare d'aver provato pure con Jet senza problemi..


 ha scritto nel messaggio
news:8F8E99BCBc...@193.216.69.37...


 wrote in message
