Newsgroup: it.comp.java
Titolo: java e SQL

Sto cercando di implementate l'esportazione di una tabella DB2 in Java.
Se eseguo l'esportazione usando il centro di controllo DB2 la cosa va a
buon fine. L'istruzione che uso è la seguente:
EXPORT TO C:\temp\esport.csv 
  OF DEL MODIFIED BY
                   coldel; 
                   chardel"" decpt. decplusblank 
                   datesiso  
  MESSAGES C:\temp\msg.txt 
  SELECT * FROM GABRIELE.VARIABILI_NOMI
Se invece incollo la stessa istruzione nel codice:
ResultSet rs = stat.executeQuery( la stessa query )
il programma mi va in eccezione. La riporto:
java.sql.SQLException: [IBM][CLI Driver][DB2/NT] SQL0007N  Il carattere
"\" posto immediatamente dopo "EXPORT TO C:" non Š valido.
SQLSTATE=42601
NON SO DAVVERO COME RISOLVERE. E' UN PEZZO CHE CI SBATTO LA TESTA.
POTETE DARMI UNA MANO?
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG


Non so se il driver jdbc funziona con la query che utilizzi però almeno devi
raddoppiare gli slash in quanto (come dice l'eccezione) C:\temp viene
interpretata come C:<TAB>emp
ma non credo che il problema sia solo questo, facci sapere
ciao

 "\" posto immediatamente dopo "EXPORT TO C:" non Š valido.
Innanzitutto potresti provare a scrivere C:\\ invece che C:\ per l'escaping
di '\'. Inoltre sei sicuro che questa istruzione (PROPRIETARIA di DB2) ti
riporterà un result set? Io non ne sono così sicuro (magari ti può
riportare il numero di record estratti).
Comunque se l'esportazione di una tabella devi farla in Java non chiamerei
un costrutto proprietario di un database, non è portabile verso altri db o
altri sistemi operativi. Meglio un file script (o batch nel tuo caso).
Ciao,
 Stefano
----------
"X WindowSSS, teSSSoro mio... lo odieremo per SSSempre"
Bill Gollum
----------

 ciao
Naturalmente gli slash li avevo già raddoppiati.
E se il problema fosse di driver?
Sto usando il bridge jdbc:odbc.
Come faccio ad usare un driver specifico per DB2???


 
Stefano, per favore, potresti spiegarti un po meglio?
Sono un principiante...
Cosa intendi per file script??? o batch nel mio caso?
DAMMI UNA MANO, please!


 Cosa intendi per file script??? o batch nel mio caso?
Intendo che probabilmente esisterà un programma da richiamare sotto linea di
comando che ti permette di fare EXPORT. In alternativa, potresti utilizzare un
SELECT * FROM tabella e poi scorrendo il resultset potresti esportare i dati in
un file di testo. O scriverti un programmino generico come feci io tempo fa che
sfruttando i databasemetadata (o al peggio i resultsetmetadata per i driver che
non supportano i dbmd, come jdbc-odbc) ti esporta una qualsiasi tabella.


 un file di testo. 
E' quello che ho appena fatto. Sembra funzioni.
Ma per poi fare l'import???
Hai idea di come potrei risolvere?


 Hai idea di come potrei risolvere?
Per esempio potresti creare il file nello stesso formato che il db si aspetta per
l'IMPORT FROM, oppure potresti scriverlo come una serie di righe
'Pippo', 'Baudo', 5, 5, 'Ciao', 46.75
così un modo semplice per inserire i dati sarebbe quello di leggere riga riga e fare
stmt.executeUpdate("INSERT INTO tabella (nome, cognome, a, b, saluto, scarpe)
VALUES(" + riga + ")");
E' solo un esempio ma per un expoter/importer veloce ho fatto così. Naturalmente
funziona se non ci sono controlli stretti sui vincoli di integrità... altrimenti
dovresti fare il drop dei vincoli, eseguire l'inserimento e ricostruire i vincoli...


...mmm...credo possa andare benissimo ciň che tu mi hai suggerito...
GRAZIE!
