PDA

View Full Version : [java-mysql]non riesco ad effettuare la connessione


RaouL_BennetH
17-01-2007, 14:49
Come da titolo :(

L'ambiente su cui sto lavorando è linux (debian sid).

Il codice che sto provando è questo:


import java.sql.*;

public class MySqlTest
{
public static void main(String[] args) {

Connection conn = null;

try
{


Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
conn = DriverManager.getConnection("jdbc:odbc://192.168.0.2:schedeauto", "raoul", "raoul");
System.out.println("Connessione riuscita");
}

catch (Exception e)
{
System.err.println("Connessione non riuscita");
}

finally
{
if (conn != null)
{
try
{
conn.close();
System.out.println("Connessione terminata");
}

catch (Exception e) {}
}
}
}
}


il driver che mi ritrovo installato è:



dpkg -l libmysql-java

||/ Nome Versione Descrizione
+++-============================-============================-========================================================================
ii libmysql-java 5.0.4+dfsg-2 Java database (JDBC) driver for MySQL


In fase di compilazione non ho nessun errore;

lanciando l'applicazione ottengo invece:

"Connessione non riuscita".


Grazie

RaouL.

andbin
17-01-2007, 15:00
Vedi qui: http://dev.mysql.com/doc/refman/5.0/en/connector-j-usagenotes-basic.html

sottovento
17-01-2007, 15:03
Prova a sostituire la

System.err.println("Connessione non riuscita");


Con la stampa dell'errore, cosi' hai delle info in piu'.

System.err.println("Connessione non riuscita: " + e);
e.printStackTrace ();


(l'esempio riportera' alcune info ridondanti, ma e' meglio cosi')

RaouL_BennetH
17-01-2007, 15:27
intanto grazie per gli aiuti :)

Allora, ho preso il codice dal link passatomi e l'ho adattato così:


import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

public class MySqlTest {
public static void main (String[] args) {

try
{
Class.forName("com.mysql.jdbc.Driver").newInstance();
Connection conn = DriverManager.getConnection("jdbc:mysql://192.168.0.2/schedeauto?" +
"user=raoul&password=raoul");


}

catch (SQLException ex) {
// handle any errors
System.out.println("SQLException: " + ex.getMessage());
System.out.println("SQLState: " + ex.getSQLState());
System.out.println("VendorError: " + ex.getErrorCode());
}

}
}


ma adesso quando vado a compilare questi sono gli errori che ottengo:


javac MySqlTest.java
MySqlTest.java:10: unreported exception java.lang.ClassNotFoundException; must be caught or declared to be thrown
Class.forName("com.mysql.jdbc.Driver").newInstance();
^
MySqlTest.java:10: unreported exception java.lang.InstantiationException; must be caught or declared to be thrown
Class.forName("com.mysql.jdbc.Driver").newInstance();
^
2 errors


:(

abbiate pazienza ve ne prego, con java è da qualche giorno che ho cominciato a studiare.

Grazie

RaouL.

andbin
17-01-2007, 15:29
ma adesso quando vado a compilare questi sono gli errori che ottengo:


javac MySqlTest.java
MySqlTest.java:10: unreported exception java.lang.ClassNotFoundException; must be caught or declared to be thrown
Class.forName("com.mysql.jdbc.Driver").newInstance();
^
MySqlTest.java:10: unreported exception java.lang.InstantiationException; must be caught or declared to be thrown
Class.forName("com.mysql.jdbc.Driver").newInstance();
^
2 errors
Devi catturare anche queste eccezioni, cioè aggiungi i catch per queste eccezioni dopo quella che hai già messo.

RaouL_BennetH
17-01-2007, 15:33
Fatto anche questo e finalmente ho ricompilato senza problemi.

Quindi credo che grazie al vostro aiuto sono vicino alla soluzione del problema;

Questo è il risultato del programma:



java MySqlTest
SQLException: No driver found for jdbc:mysql://192.168.0.2/schedeauto?user=raoul&password=raoul
SQLState: null
VendorError: 0


come faccio a capire se il driver che ho è giusto?

sottovento
17-01-2007, 15:40
Sembrerebbe non arrivare al file .jar contenente il driver che ti interessa. Siccome lo carichi dinamicamente, puoi tranquillamente compilare ma non lo trovi in esecuzione.

Lo hai aggiunto nel CLASSPATH? Oppure lo hai copiato sotto $(Directory_di_installazione_di_Java)/jre/lib/ext ?

andbin
17-01-2007, 15:48
Sembrerebbe non arrivare al file .jar contenente il driver che ti interessa. Siccome lo carichi dinamicamente, puoi tranquillamente compilare ma non lo trovi in esecuzione.Però se non avesse trovato la classe com.mysql.jdbc.Driver, allora avrebbe dato l'eccezione ClassNotFoundException.

RaouL_BennetH
17-01-2007, 16:20
rieccomi :(

allora credo sia proprio un problema di driver;

un'altro esperimento di connessione con un tipo di gestione dell'errore un pochetto più preciso mi da:



java MainTest
Errore durante la connessione.
com.mysql.jdbc.Driver not found in gnu.gcj.runtime.SystemClassLoader{urls=[file:./], parent=gnu.gcj.runtime.ExtensionClassLoader{urls=[], parent=null}}


:mc:

sottovento
17-01-2007, 16:33
Non stai quindi usando il jdk di Sun, giusto?

RaouL_BennetH
17-01-2007, 16:40
Non stai quindi usando il jdk di Sun, giusto?

uhm, ho preso l'ultimo jdk dal sito sun e l'ho installato sulla macchina linux. Può darsi che debba fare ancora qualche operazione? Nel senso come faccio a capire su linux che jdk sto usando come principale?

Abbiate pazienza per le domande stupide che faccio :(

Grazie.

RaouL.

sottovento
17-01-2007, 16:53
Ciao,
l'errore da te pubblicato sembra riportato da un compilatore java gnu.

La mia idea e' che probabilmente hai installato il nuovo compilatore ma tu stia utilizzando ancora quello vecchio. Oppure (ancora peggio, ma mi capita sempre :) ) stia utilizzando il nuovo per compilare (poiche' magari hai un solo compilatore) ma un'altra virtual machine per eseguire (infatti "abbondano" se cominci ad installare applicazioni "importanti" fatte in Java, che si portano dietro la loro Virtual Machine).

Spero di non farti perdere tempo, ma il mio suggerimento e' quello di accertarti di utilizzare il giusto compilatore e la giusta Virtual Machine per eseguire: controlla la variabile d'ambiente PATH e ricorda, se trovi piu' riferimenti a virtual machine, che utilizzi la prima che viene trovata.

RaouL_BennetH
17-01-2007, 16:57
Ciao,

Spero di non farti perdere tempo, ma il mio suggerimento e' quello di accertarti di utilizzare il giusto compilatore e la giusta Virtual Machine per eseguire: controlla la variabile d'ambiente PATH e ricorda, se trovi piu' riferimenti a virtual machine, che utilizzi la prima che viene trovata.

Grazie ancora per l'aiuto, ma sinceramente non so come controllare questi valori :(

Ho commesso l'errore di utilizzare la debian come se fossi su windows, ovvero, ho scelto di installare mediante il comodo apt (per ogni cosa che mi chiedeva in merito a java) e per li jdk mi sono limitato a lanciare l'installer scaricato dal sito sun. Confesso di non essermi preoccupato di settare alcunchè. Potreste indicarmi dove potrei controllare queste cose?

Ancora grazie.

RaouL.

sottovento
17-01-2007, 17:05
Grazie ancora per l'aiuto, ma sinceramente non so come controllare questi valori :(

Ho commesso l'errore di utilizzare la debian come se fossi su windows, ovvero, ho scelto di installare mediante il comodo apt (per ogni cosa che mi chiedeva in merito a java) e per li jdk mi sono limitato a lanciare l'installer scaricato dal sito sun. Confesso di non essermi preoccupato di settare alcunchè. Potreste indicarmi dove potrei controllare queste cose?

Ancora grazie.

RaouL.

Scusa tu
Immagino che quindi non ha settato, nella variabile PATH, la directory che contiene compilatore & VM.

Per controllare:
echo $PATH
cosa vedi? Vedi il tuo nuovo compilatore?


Se non e' chiaro, non preoccuparti, posta ancora. Io ora vado a dormire ma ho visto che c'e' gente ben piu' preparata di me che potra' risponderti

RaouL_BennetH
17-01-2007, 17:15
ecco, ora le cose mi sono un pò più chiare;

Tutto ciò che riguarda la nuova versione di java si trova nella mia home in:

/home/raoul/jdk1.6.0

e in questa dir ho tutte le lib, ho la dir /bin, etcetera.

Se volessi quindi settare linux in modo che quando compilo come utente raoul, utilizzo questo jdk anzichè quello nativo, cosa dovrei fare? creare un file di configurazione?

Grazie ancora !

Raoul.

RaouL_BennetH
17-01-2007, 17:37
credo di aver risolto almeno per il classpath così:



export JAVA_HOME=/home/raoul/jdk1.6.0

export PATH=$JAVA_HOME/bin:$PATH



provo a ricompilare e vi so dire :)

RaouL_BennetH
17-01-2007, 17:40
credo di aver risolto almeno per il classpath così:



export JAVA_HOME=/home/raoul/jdk1.6.0

export PATH=$JAVA_HOME/bin:$PATH



provo a ricompilare e vi so dire :)

:muro:

come non detto!

subito dopo aver fatto l'export se faccio:

which javac e which java mi porta correttamente alla mia home, ma se compilo
il progettino mi da lo stesso errore e ripetendo il comando which mi punta di nuovo a /usr/bin/javac :(

andbin
17-01-2007, 17:46
Tutto ciò che riguarda la nuova versione di java si trova nella mia home in:

/home/raoul/jdk1.6.0

e in questa dir ho tutte le lib, ho la dir /bin, etcetera.

Se volessi quindi settare linux in modo che quando compilo come utente raoul, utilizzo questo jdk anzichè quello nativo, cosa dovrei fare? creare un file di configurazione? set PATH=/home/raoul/jdk1.6.0/bin:$PATHPuoi lanciarlo a mano questo comando ... ma se vuoi renderlo permanente devi inserirlo in uno degli script che vengono letti all'avvio della shell, ad esempio /etc/profile (globale) oppure ad esempio .bash_profile o .profile (questi ultimi due sono "dell'utente", da mettere sotto la sua 'home').

RaouL_BennetH
17-01-2007, 18:58
set PATH=/home/raoul/jdk1.6.0/bin:$PATHPuoi lanciarlo a mano questo comando ... ma se vuoi renderlo permanente devi inserirlo in uno degli script che vengono letti all'avvio della shell, ad esempio /etc/profile (globale) oppure ad esempio .bash_profile o .profile (questi ultimi due sono "dell'utente", da mettere sotto la sua 'home').

Allora, ho provato a metterlo sia in .bashrc che in .profile, ma il risultato è che poi quando mi loggo come raoul non mi riconosce nessun comando (per esempio ls, ps, etcetera... )

Ho letto la sezione sul sito Sun:

http://java.sun.com/j2se/1.4.2/docs/tooldocs/solaris/classpath.html

ma se devo dire di averci capito qualcosa direi una bugia :(

non è che avete un .profile di esempio?

grazie

Raoul.

RaouL_BennetH
17-01-2007, 19:06
Ok, adesso sembra aver memorizzato il classpath.

Provo a ricompilare e vi faccio sapere.

Grazie.

Raoul.

RaouL_BennetH
17-01-2007, 19:25
Porcaccia miseria!! non ci credo ma adesso funziona :)

C'era comunque un altro problema da risolvere, ovvero di scaricare un apposito driver per mysql che è il connector versione 5.0.4.

Adesso la connessione al database funziona.

Grazie mille a tutti quanti, non so come ringraziarvi :ave:

RaouL.