View Full Version : [Java] Recuperare dati da un DB
GiulioCesare
03-09-2005, 19:46
Salve ragazzi, sto provando a collegarmi con java ad un db fatto con Postgresql, usando jdbc, ho scaricato i driver e ho messo il loro percorso nel file path, ma non capisco cosa c'è di sbagliato nel mio metodo che preleva i dati dal db, visto che l'eccezione mi segnala un java.lang.NullPointerException, comunque questo è il metodo. Grazie a chi vorrà aiutarmi
class db
{
public void Interroga()
{
String c,n,m;
try
{
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
Connection con = DriverManager.getConnection("jdbc:odbc:vivaio");
Statement stat = con.createStatement();
ResultSet res = stat.executeQuery("SELECT * FROM piante");
while (res.next())
{
c=res.getString("id_pianta");
n=res.getString("nome");
m=res.getString("tipo");
System.out.println(c+n+m);
}
res.close();
stat.close();
con.close();
}
catch(Exception e)
{
System.out.println("Problema: " + e.toString());
}
}
}
BlueDragon
03-09-2005, 20:57
Ti conviene aggiungere e.printStackTrace(); al blocco del catch, così scopri qual'è la riga che genera l'eccezione :)
Apparentemente il codice mi sembra tutto apposto..
GiulioCesare
03-09-2005, 21:04
Secondo il printStackTrace, il problema è qui
Connection con = DriverManager.getConnection("jdbc:odbc:vivaio");
Forse ci sono problemi con la stringa di connessione al db, ho forse bisogna settare postgresql per usare i JDBC
BlueDragon
03-09-2005, 21:26
Secondo il printStackTrace, il problema è qui
Connection con = DriverManager.getConnection("jdbc:odbc:vivaio");
Forse ci sono problemi con la stringa di connessione al db, ho forse bisogna settare postgresql per usare i JDBC
Uhm....ma hai settato il DNS di sistema con nome vivaio per puntare al database?
GiulioCesare
03-09-2005, 22:50
Cosa intendi per settare il DNS di sistema?
Comunque ora mi segnala questo errore La proprietà ``user'' è mancante. E` obbligatoria.
BlueDragon
04-09-2005, 00:46
Cosa intendi per settare il DNS di sistema?
Comunque ora mi segnala questo errore La proprietà ``user'' è mancante. E` obbligatoria.
Praticamente è quell'operazione con cui registri il tuo database come sorgente dati ODBC, in modo che quando invochi DriverManager.getConnection("jdbc:odbc:vivaio"); il programma sappia *chi* è vivaio :)
Comunque se ora ti chiede l'user, allora direi che stai già parlando con il database...quindi non è una questione di trovare o meno vivaio :)
Sul sito di PostgreSQL ho cercato la parola "java" ed ho trovato un link con questo codice:
Class.forName("org.postgresql.Driver");
conn = DriverManager.getConnection("jdbc:postgresql:test", "testuser", "");
http://www.postgresql.org/files/documentation/books/aw_pgsql/node154.html
Sembra che in getConnection tu debba specificare l'user che ti viene segnalato mancante.. :)
GiulioCesare
04-09-2005, 12:10
Ho fatto quello che diceva il sito, ma mi segnala l'eccezione Connessione rifiutata. Controllare che il nome dell'host e la porta siano corretti, e che il server (postmaster) è in esecuzione con l'opzione -i, che abilita le connessioni attraverso la rete TCP/IP.
Eppure ho settato il file di postmaster con -i e messo nel file postgresql.conf tcpip_socket = true :cry:
OT
Ma i nomi delle classi non dovrebbero cominciare con una maiuscola e i nomi dei metodi con una minuscola? ;)
FINE OT
DioBrando
04-09-2005, 18:52
OT
Ma i nomi delle classi non dovrebbero cominciare con una maiuscola e i nomi dei metodi con una minuscola? ;)
FINE OT
Per quanto riguarda le classi la risposta è no...è una convenzione quella di scrivere in maiuscolo la lettera iniziale di una classe ( e se il nome è composto, ciascuna parola deve iniziare con la maiuscola, es. NomeClasse) per una questione di leggibilità, ma puoi benissimo scrivere in minuscolo.
Alla fine l'importante è scrivere il nome della classe identico al nome del file, altrimenti...;)
BlueDragon
04-09-2005, 19:10
Ho fatto quello che diceva il sito, ma mi segnala l'eccezione Connessione rifiutata. Controllare che il nome dell'host e la porta siano corretti, e che il server (postmaster) è in esecuzione con l'opzione -i, che abilita le connessioni attraverso la rete TCP/IP.
Eppure ho settato il file di postmaster con -i e messo nel file postgresql.conf tcpip_socket = true :cry:
Purtroppo su problemi specifici di PostgreSql non saprei come aiutarti visto che non lo conosco...ed al momento sono anche un po' a corto di tempo per impararlo :) Prova a cercare su Google con l'errore come parola chiave, magari nel frattempo si fa vivo qualche esperto di Postgresql in questo thread.. :)
OT
Ma i nomi delle classi non dovrebbero cominciare con una maiuscola e i nomi dei metodi con una minuscola?
FINE OT
Si, e non mi sembra che abbiamo violato la regola in questi post... :)
EDIT: Non avevo fatto caso che DioBrando aveva già risposto sulla convenzione dei nomi....cmq come già detto è una convenzione non un obbligo :)
lo so anche io che è una convenzione, ma non capisco che senso ha invertirla, chiamando una classe db e un metodo Interroga()
(Mi riferisco al primo post)
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.