Newsgroup: it.comp.java
Titolo: Rilevare quale DBMS installato

Salve a tutti,
nell'ambito di una applicazione più grande, per il momento, devo scrivere un 
pezzo di codice che rilevi quali DBMS siano installati su una macchina, 
qualcuno ha idea di come si possa fare?
--
Noisemaker 

AGGIORNAMENTO:
mi è venuta l'idea che certamente l'istallazione di un dbms lascia tracce 
nel registro di win.
Ho visto che la chiave interessata è 
LOCAL_MACHINE\software\odbc\odbcinst.ini
a parte che non so come fare per legre il registro tramite java, questa 
soluzione mi lascia perplesso perchè inficia totalmenete la portabilità.
Secondo voi è l'unica soluzione?
--
Noisemaker 

:

Forse è una cazzata, non c'ho mai provato, ma provare ad aprire tutti  
quelli conosciuti?
In fondo di dbms veramente utilizzati/utilizzabili non sono così tanti.
Potresti fare una bella cosuccia modulare, ovvero una classe per ogni dbms  
che tenti di aprire, a cui accedi di reflection.
In questa maniera se salta fuori il cliente con il db starno in 30 sec.  
crei il modulo anche per quel caso
-- 
Manny Calavera
Mail to: anforagimailpuntocom²


Forse ho dato l'impressione di essere più esperto di quel che sono, ma in 
effetti sono un newbie specie dell'uso dei DB tramite Java, perciò parto con 
le domande.
Cosa intendi per aprire? Io conosco 2 modi per aprire i DB da java, o 
caricando i driver forniti da terze parti (e già qui trovo un bel po' di 
problemi) oppure caricando i driver Jdbc-odbc della sun e poi connettersi 
all'ODBC appropriato a seconda del Db a cui mi sto collegando, tu quale dei 
due modi consigli?
Per inciso, dove posso trovare le URL di connessione per i diversi Database?
Faccio presente che il frammento di codice lavorerà in un programma dove il 
suo compito sarà quello di stabilire quale DB è istallato su una macchina e 
creare il database su cui deve lavorare usando un DBMS di quelli residenti 
(limitatamente ad una lista di compatibilità) in caso di esito 
negativo(ovvero nessun dbms istallato o dbms non previsti dal programma 
dovrebbe istallare automaticamente MySql).
Ti ringrazio per l'aiuto
--
Noisemaker

 Per inciso, dove posso trovare le URL di connessione per i diversi Database?
Tempo fa nel sito della sun (di java) c'era una pagina con l'elenco dei 
database, il tipo dei driver disponibili e i link a chi li faceva. Se 
non sbaglio era un riferimento nella documentazione dei jdbc... è da un 
pò che non la vedo ma qualcosa dovrebbe ancora esserci.
bye
DKano


Come al solito sono riuscito a non essere chiaro su tutta la linea :)
Allora il mio problema è questo, il mio programma alla prima esecuzione 
deve,
A) ricercare i DBMS istallati sulla macchina
B) confrontarli con una lista di DBMS con cui il programma dovrà essere 
compatibile
  C1) se trova delle corrispondenze deve far scegliere all'utente quale DBMS 
il programma userà da ora in poi
  C2) se non trova corrispondenze deve avviare l'istallazione di MySql e 
usare questo
D) deve creare il database e tutte le tabelle.
Siccome mi hanno consigliato di aprire i le connessioni ai DB per verificare 
che esistano i driver o meno io avevo pensato di fare così:
Tentare per prima cosa il caricamento dei driver diretti (tipo 4), poi 
tentare comunque anche la connessione tramite JDBC-ODBC, perché non conosco 
minimamente la configurazione delle macchine su cui girerà il programma e 
non vorrei trovarmi su una macchina con un DB supportato istallato ma senza 
driver e con invece l'odbc istallato, se evito di fare il controllo della 
connessione tramite bridge avrei una macchina che rispetta i requisiti, ma 
il programma non lo rileverebbe e potrei non avere rispettato le specifiche.
I problemi che finora ho riscontrato o individuato analizzando il caso sono:
1: dove trovo le specifiche le stringhe di connessione ai driver dei DB che 
voglio supportare? (per ora ho trovato quelle di mysql 
"org.gjt.mm.mysql.Driver" o " com.mysql.jdbc.Driver " e quella di Oracle 
"oracle.jdbc.driver.OracleDriver")
2: dove trovo le strutture delle URL di connessione sia per usare i driver 
di tipo 4 sia per usare i bridge jdbc-Odbc
3: come faccio a connettermi ad un DB se questo non è stato ancora creato? 
(per mysql ho visto usare il flag create=true da aggiungere alla URL di 
connessione, ma questo ricade nel problema 2 :) )
4: come faccio a far partire l'istallazione di mysql dal programma?
5: come faccio a far istallare direttamente da programma il driver mysql ( 
si chiama connector mi pare) visto che bisogna aggiungere il classpath di 
istallazione alle variabili di ambiente?
Ora sono stato molto più prolisso, ma spero più chiaro.
Sono uno studente e questa è una porzione del caso di studio che sto 
affrontando, aiutatemi ad imparare.
P.S: il link al sito sun dove scaricare i driver l'ho trovato 
http://developers.sun.com/product/jdbc/drivers
 grazie della dritta.
E grazie di tutto l'aiuto. 

 istallazione alle variabili di ambiente?
Non c'e' bisongo... se nella tua applicazione nel suo classpath c'e' il 
driver di mysql non serve "installarlo" a parte.
bye
DKano

 meglio, dovresti avere più dati del previsto).
Allora ti porto altri elementi che ci possono aiutare. Il mio programma 
lavorerà sempre e solo in locale.
Non ho necessità di lavorare su macchine non windows, in pratica la 
portabilità non è una richiesta esplicita.
I DB che dovranno essere sicuramente supportati sono Access, e posso 
accedervi tranquilamente tramite jdbc-odbc tanto quello sulle macchine win 
c'è sempre; e mysql in quanto è quello che vado ad istallare io in assenza 
di DB compatibili e mi ci collego col connector che mi porto nelle librerie 
(giusto?)
il parco DB cercherò di allargarlo a quelli che non mi creano problemi in 
fase di rilevamento.
Ora il problema che mi hai posto tu l'ho sperimentato anche io, però per ora 
si è presentato solo sotto forma di mancanza di un DB a cui connettersi, 
quindi se riuscivo a crearlo in fase di connessione potevo crearne uno di 
prova da rimuovere in seguito (si può fare?)
E se i DB non si possono creare da programma come si fa di solito coi 
programmi che si appaoggiano ad un DB?
Altre idee su come rilevare un dbms residente su una macchina? Posto che ora 
ho capito che i driver me li devo portare dietro nelle librerie e che quindi 
la connessione tramite jdbc-odbc la userò solo per Access visto che il 
driver in java che ho trovato non è gratis :)
Ti ringrazio dell'appoggio
--
Noisemaker