PDA

View Full Version : [java e mysql] Driver JDBC


squall15
04-06-2007, 14:30
Ciao a tutti, ho un problema che spero possiate risolvermi; in pratica in mysql ho creato una tabella con alcuni attributi che dovrei caricare da un programma in java; il programma viene compilato ma in esecuzione mi appare
"non trovo il driver com.mysql.jdbc.Driver"
Che devo fare per poter accedere al database?
Grazie

^TiGeRShArK^
04-06-2007, 14:32
...hai il jar contenente i driver jdbc nel classpath?
te ne accorgi solo al runtime perchè il driver viene caricato tramite reflection...

squall15
04-06-2007, 14:38
Grazie per la risposta, purtroppo è la prima volta che tento questo tipo di cose e non saprei cosa guardare, mi sai indicare cosa vedere o se vuoi ti posto il codice così dai un'occhiata e mi sai dire dove sbaglio?
Grazie ancora, spero in una tua risposta

^TiGeRShArK^
04-06-2007, 14:43
non dipende dal codice...
dipende da come lo esegui...
Se lo stai lanciando dalla riga di comando devi fare qualcosa del genere:
java -cp jardeldriverjdbc.jar;. tuopackage.TuaClasse

Se stai usando Eclipse o qualche altro IDE devi semplicemente aggiungere questo jar alla build path del tuo progetto.

squall15
04-06-2007, 14:49
Lo lancio da riga di comando;
mi rendo conto che ti sto rompendo, se hai voglia di scrivere il comando esatto ti ringrazio, altrimenti grazie lo stesso, cercherò altre strade, ho provato a lanciare il tuo comando avendo aggiunto il package e il nome della classe ma non ci sono stati risultati quindi evidentemente sbaglio qualcosa.
Ancora grazie

^TiGeRShArK^
04-06-2007, 14:58
non ci sono altre strade, il problema è che non hai il jar del driver jdbc nel classpath, e il comando per aggiungerlo è quello :p
Sicuro di aver scritto il percorso completo per questo jar?
Non è che il driver che usi è type 2 anzikè type 4 e ha bisogno anke di un jar contenente le librerie native?

squall15
04-06-2007, 15:01
Forse sbaglio a cercare il percorso del jar, mi sapresti dire come verificarlo?

^TiGeRShArK^
04-06-2007, 15:05
....devi vedere dove hai copiato il jar del driver jdbc all'interno del tuo hard disk..
ovviamente da qui non posso vedere i file che hai nel tuo pc :p
prova a cercarlo con la funzione search di windows...
o al max riscaricalo e salvalo in una posizione che conosci.
Una volta che l'hai trovato prova dapprima a passargli un percorso assoluto del tipo:

java -cp C:\jdbc\jdbcdriver.jar;. mio.package.MiaClasse

squall15
04-06-2007, 15:14
Ascolta solo 1 cosa, il file che mi serve è sqljdbc.jar?Se è questo, risolvo se inserisco il suo percorso nel classpath del sistema giusto?

squall15
04-06-2007, 15:21
Allora, ho preso il file, si trova in C:\Documents and Settings\nome\Desktop\Microsoft SQL Server 2005 JDBC Driver\sqljdbc_1.2\enu
In pratica il comando che devo digitare da terminale è
java -cp C:\Documents and Settings\nome\Desktop\Microsoft SQL Server 2005 JDBC Driver\sqljdbc_1.2\enu\jdbcdriver.jar;. a.prova
dove a è il package e prova è il nome della classe.
Mi confermi questo?
Te lo chiedo perchè mi dà errore "exception in thread main java.lang.noclassdeffound error: and"

PGI-Bis
04-06-2007, 15:27
Se i percorsi da linea di comando contengono degli spazi puoi usare le virgolette, altrimenti java.exe pensa che le cose finiscano quando invece non sono ancora a metà.

java -cp ".;c:\Document And Settings...eccetera"

Per la connessione alla base dati usa il data source fornito insieme al driver. In questo modo, oltre a fare un salto nel nuovo millennio, ottieni anche la possibilità di verificare la corretta inclusione delle librerie del driver durante la compilazione. Per MySql, il data source è:

com.mysql.jdbc.jdbc2.optional.MysqlDataSource

squall15
04-06-2007, 15:35
Allora, ho sostituito Class.forName("com.mysql.jdbc.jdbc2.optional.MysqlDataSource");
al posto di Class.forName("com.mysql.jdbc.Driver");
Ho lanciato dal prompt il comando
java -cp ".;C:\Documents and Settings\nome\Desktop\Microsoft SQL Server 2005 JDBC Driver\sqljdbc_1.2\enu\jdbcdriver.jar;. a.prova"
ma il risultato è nulla, nel senso che dice:
Usage: java [-options] class [args...]
<to execute a class>
or java [-options] -jar jarfile [args...]
to execute a jar file>
In compilazione non dà errori, in esecuzione continua a dire che manca il driver.
Dove sbaglio?

^TiGeRShArK^
04-06-2007, 15:45
a.prova va fuori dalle virgolette.
Ma cmq sicuro che la tua classe si chiami prova? :mbe:
di solito i nomi di classi vanno tutti con l'iniziale maiuscola :mbe:

PGI-Bis
04-06-2007, 15:46
Che è?

No. Il DataSource lo usi nel codice al posto di DriverManager che è vetusto.

import com.mysql.jdbc.jdbc2.optional.MysqlDataSource;

...

MysqlDataSource dataSource = new MysqlDataSource();
dataSource.setDatabaseName(...
dataSource.setPort(...
Connection conn = dataSource.getConnection(userName, password)

squall15
04-06-2007, 15:54
Allora, per la classe avete ragione, nella fretta l'ho rinominata in Pro.java; il comando java -cp ".;C:\Documents and Settings\nome\Desktop\Microsoft SQL Server 2005 JDBC Driver\sqljdbc_1.2\enu\jdbcdriver.jar;." a.Pro genera però l'errore "non trovo il driver com.mysql.jdbc.Driver"
In pratica lo stesso errore che ho anche se dò java Pro dopo la compilazione.
Non capisco proprio, il percorso per il jdbcdriver.jar è questo, perchè non lo prende?

squall15
04-06-2007, 15:57
A PGI-Bis: se faccio l'import che hai indicato quando compilo dice che il package com.....optional non esiste :cry:

^TiGeRShArK^
04-06-2007, 16:02
scusa..
fai

jar tvf "C:\Documents and Settings\nome\Desktop\Microsoft SQL Server 2005 JDBC Driver\sqljdbc_1.2\enu\jdbcdriver.jar" | findstr com/mysql/jdbc/Driver

e vedi se lì dentro vedi la classe che java non riesce a trovare...

PGI-Bis
04-06-2007, 16:03
A PGI-Bis: se faccio l'import che hai indicato quando compilo dice che il package com.....optional non esiste :cry:

Benissimo. La prima cosa che mi viene in mente è che qui non si parli di MySql ma di SQL Server di Ms. Sono due cose diverse.

squall15
04-06-2007, 16:05
Non lo trova; mi dice FilenotFoundexception (impossibile trovare il percorso specificato).
Sai quale può essere il motivo?

^TiGeRShArK^
04-06-2007, 16:06
eh direi di si ora che faccio caso al percorso del jar :p

^TiGeRShArK^
04-06-2007, 16:06
Non lo trova; mi dice FilenotFoundexception (impossibile trovare il percorso specificato).
Sai quale può essere il motivo?

il mio comando non te lo trova? :mbe:
semplice... il file non esiste in quel percorso :D

squall15
04-06-2007, 16:11
Allora, scusate un attimo ma io ho installato questo
http://dev.mysql.com/downloads/
cioè mysql server 5.0
Quindi cosa ho sbagliato a scaricare?Il driver?Ho preso quello per il sql server?

^TiGeRShArK^
04-06-2007, 16:15
il driver jdbc si dovrebbe chiamare:
mysql-connector-java-5.0.6.jar

o qualcosa del genere

squall15
04-06-2007, 16:20
Sì, grazie, l'ho trovato
Scusate per tutto il disturbo, non mi ero accorto fosse la versione sbagliata, ora che faccio? Il percorso della cartella estratta dallo zip è C:\Documents and Settings\nome\Desktop e qui c'è il file mysql-connector.jar; riprendo il comando di prima e metto questo percorso al posto dell'altro sbagliato?

^TiGeRShArK^
04-06-2007, 16:24
zizzì

squall15
04-06-2007, 16:26
Allora, ho dato il comando java -cp ".;C:\Doc.....\mysql-connector-java\mysql-connector-bin.jar" a.Pro
Questa volta parte, solo che l'errore è "accesso negato per l'utente @localhost (using password No).
Ora da cosa dipende?La connessione a questo punto dovrebbe funzionare, ma perchè non ho accesso?E scusate ancora per il casino di prima e grazie mille per il disturbo ragazzi, seriamente, mi state dando davvero un immenso aiuto

^TiGeRShArK^
04-06-2007, 16:48
ma il server mysql l'hai fatto partire prima in locale? :fagiano:
cmq il problema in quel caso è di autenticazione. lo username e/o la password sono sbagliati.

squall15
04-06-2007, 17:01
Allora, il server è aperto, per quanto riguarda la password la sintassi del comando dovrebbe essere:
Connection c=null;
c=DriverManager.getConnection ("jdbc:odbc:nome_database","nome_admin","pwd_di_accesso");
Mi confermi che è giusto?

^TiGeRShArK^
04-06-2007, 17:28
DriverManager.getConnection("jdbc:mysql://remoteip/test","root ", "secret");
non devi usare odbc devi usare mysql

squall15
05-06-2007, 13:19
Hai ragione, in pratica mi sono confuso, ti ho postato la parte di un codice sbagliato; ti posto la parte che mi interessa del main, se puoi darci un'occhio veloce e indicarmi dove sbaglio mi faresti un enorme favore:
main
{
InetAddress nome=InetAddress.getLocalHost ();
String URL="jdbc:mysql://"+nome+":3306/agenda";
Class.forName ("com.mysql.jdbc.Driver"); //specifica il driver
/*Connessione con il database */
con=DriverManager.getConnection (URL, "amministratore", "password");
Statement s=con.createStatement (); //creo un'istanza di Statement
String query="SELECT * FROM tabella";
ResultSet r=s.executeQuery (query); //interroga la bd e ha le risposte in un ResultSet
while (r.next()) //caricamento in java
{
int num=r.getInt (1); //carica la 1°colonna
}
}
La compilazione non dà errori.Grazie ancora
Edit: ah, l'errore è sempre quello, l'host non ha permessi per accedere al database

squall15
05-06-2007, 13:59
Ok, risolto, sono entrato finalmente nella base di dati; tigershark non so come ringraziarti per l'aiuto, sei stato gentilissimo e disponibilissimo :mano: