Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 29
  1. #1
    Utente di HTML.it
    Registrato dal
    Feb 2012
    Messaggi
    102

    java.sql.SQLException: No suitable driver found for jdbc - IMPOSSIBILE DA RISOLVERE

    Ciao ragazzi! Mi sono imbattuto in questo problema, dove voglio semplicemente acquisire dei valori da un database prova di MySQL. Cercando in internet quest'errore, trovo 2 vie generiche:

    1) Bisogna scrivere un metodo che carichi i driver manualmente prima di effettuare le richieste, ovvero:
    Class.forName("com.mysql.jdbc.Driver");
    2) Configurare la variabile CLASSPATH con il jar del Connector/J: ci ho provato, ma oltre che non esisteva la CLASSPATH, creandola e mettendogli il path del Connector/J non mi faceva più partire nessuna classe in generale!

    Adesso, voglio dire che ho formattato il pc, e prima tutto funzionava correttamente né effettuando l'opzione 1, né l'opzione 2, ma semplicemente seguendo questa guida dall'inizio alla fine:

    http://docs.oracle.com/javase/tutori...ngstarted.html

    E inoltre la guida con i tutorial example funzionano, ma il mio programma a parte no... allego qui il codice:

    codice:
    import java.sql.*;
    
    class DBProva{
    
    
        public static void main (String[] args){
            PreparedStatement state = null;
            Connection conn = null;
            try {
                conn = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/sakila", "root", "root");    
                System.out.println("Connessione riuscita, database: "+conn.getCatalog());
                
                state = conn.prepareStatement("SELECT * FROM film");                                        
                ResultSet result = state.executeQuery();                                                    
                while (result.next()) System.out.println("Nomi film: " + result.getString("title"));
                state.close();                                                                        
                state.close();
                conn.close();
    
    
            }
            catch (SQLException e){
                e.printStackTrace();
            }
        }
    }
    Qualcuno mi spiega cosa diamine succede? Perché sto impazzendo :\ grazie...

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da valerio65 Visualizza il messaggio
    1) Bisogna scrivere un metodo che carichi i driver manualmente prima di effettuare le richieste, ovvero:
    Class.forName("com.mysql.jdbc.Driver");
    Vero in generale. Ma se usi almeno Java SE 6 e il driver JDBC rispetta le specifiche JDBC 4.0 (e per il driver MySQL è così già da un po'), questo passo non è più strettamente necessario.

    Quote Originariamente inviata da valerio65 Visualizza il messaggio
    2) Configurare la variabile CLASSPATH con il jar del Connector/J: ci ho provato, ma oltre che non esisteva la CLASSPATH, creandola e mettendogli il path del Connector/J non mi faceva più partire nessuna classe in generale!
    Il classpath come concetto è semplicemente un elenco di directory/file jar che la JVM usa per rintracciare le classi. Ovviamente in classpath devi certamente mettere il jar del driver JDBC MySQL ma anche il jar (o la directory, se sono classi "sfuse") delle tue classi.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Utente di HTML.it
    Registrato dal
    Feb 2012
    Messaggi
    102
    Quote Originariamente inviata da andbin Visualizza il messaggio
    Vero in generale. Ma se usi almeno Java SE 6 e il driver JDBC rispetta le specifiche JDBC 4.0 (e per il driver MySQL è così già da un po'), questo passo non è più strettamente necessario.


    Il classpath come concetto è semplicemente un elenco di directory/file jar che la JVM usa per rintracciare le classi. Ovviamente in classpath devi certamente mettere il jar del driver JDBC MySQL ma anche il jar (o la directory, se sono classi "sfuse") delle tue classi.
    Ho provato ad eseguire il punto 2 con classpath come dicevi tu (e per sicurezza ho anche provato l'1) ma niente...

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da valerio65 Visualizza il messaggio
    Ho provato ad eseguire il punto 2 con classpath come dicevi tu (e per sicurezza ho anche provato l'1) ma niente...
    (es. per Windows)

    set CLASSPATH=blabla\mysql-connector-java-X.Y.Z-bin.jar;directoryTueClassi

    dove directoryTueClassi può certamente essere un path assoluto ma spesso se si avvia da prompt dei comandi e si sta come directory corrente proprio in quella directory, basta un punto "." ovvero appunto directory corrente.

    Poi comunque bisogna anche vedere se le tue classi sono in un package specifico o in quello di default.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    Utente di HTML.it
    Registrato dal
    Feb 2012
    Messaggi
    102
    Quote Originariamente inviata da andbin Visualizza il messaggio
    (es. per Windows)

    set CLASSPATH=blabla\mysql-connector-java-X.Y.Z-bin.jar;directoryTueClassi

    dove directoryTueClassi può certamente essere un path assoluto ma spesso se si avvia da prompt dei comandi e si sta come directory corrente proprio in quella directory, basta un punto "." ovvero appunto directory corrente.

    Poi comunque bisogna anche vedere se le tue classi sono in un package specifico o in quello di default.
    l'unica classe che uso è quella che ho allegato come codice, ho provato a fare come dici tu ma non funziona. Dando il . dopo il ; non funziona e mi dice couldn't find or load class DBProva

  6. #6
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da valerio65 Visualizza il messaggio
    l'unica classe che uso è quella che ho allegato come codice, ho provato a fare come dici tu ma non funziona. Dando il . dopo il ; non funziona e mi dice couldn't find or load class DBProva
    Deduco quindi che DBProva sia nel package di default. Ok. Supponiamo che DBProva.class (il compilato dal .java) sia in C:\Prove e il driver JDBC sia in C:\Librerie

    Quindi

    set CLASSPATH=C:\Librerie\mysql-connector-java-X.Y.Z-bin.jar;C:\Prove

    (ovviamente cambia i path che qui sono solo di esempio)

    poi

    java DBProva
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  7. #7
    Utente di HTML.it
    Registrato dal
    Feb 2012
    Messaggi
    102
    Quote Originariamente inviata da andbin Visualizza il messaggio
    Deduco quindi che DBProva sia nel package di default. Ok. Supponiamo che DBProva.class (il compilato dal .java) sia in C:\Prove e il driver JDBC sia in C:\Librerie

    Quindi

    set CLASSPATH=C:\Librerie\mysql-connector-java-X.Y.Z-bin.jar;C:\Prove

    (ovviamente cambia i path che qui sono solo di esempio)

    poi

    java DBProva
    già provato a mettere i due path assoluti del driver e del sorgente, ma nulla... ho anche provato a mettere il sorgente nella stessa cartella del driver

  8. #8
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da valerio65 Visualizza il messaggio
    già provato a mettere i due path assoluti del driver e del sorgente, ma nulla... ho anche provato a mettere il sorgente nella stessa cartella del driver
    ma nulla ... cosa? Posta qualcosa di più preciso. Quanto ti ho detto è corretto e funziona presupponendo che i path che metti realmente siano corretti e che se invochi solo "java" chiaramente java.exe deve essere rintracciabile in PATH (di norma si mettere il percorso alla "bin" del JDK in PATH).
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  9. #9
    Utente di HTML.it
    Registrato dal
    Feb 2012
    Messaggi
    102
    Quote Originariamente inviata da andbin Visualizza il messaggio
    ma nulla ... cosa? Posta qualcosa di più preciso. Quanto ti ho detto è corretto e funziona presupponendo che i path che metti realmente siano corretti e che se invochi solo "java" chiaramente java.exe deve essere rintracciabile in PATH (di norma si mettere il percorso alla "bin" del JDK in PATH).
    Variabile PATH: C:\ProgramData\Oracle\Java\javapath;C:\Program Files (x86)\NVIDIA Corporation\PhysX\Common;%SystemRoot%\system32;%Sy stemRoot%;%SystemRoot%\System32\Wbem;%SYSTEMROOT%\ System32\WindowsPowerShell\v1.0\;C:\Program Files\Java\jdk1.8.0_25\bin;C:\Program Files (x86)\MySQL\MySQL Fabric 1.5.2 & MySQL Utilities 1.5.2 1.5\;C:\Program Files (x86)\MySQL\MySQL Fabric 1.5.2 & MySQL Utilities 1.5.2 1.5\Doctrine extensions for PHP\;C:\Program Files\Apache\apache-ant-1.9.4\bin

    Java SDK installa in: C:\Program Files\Java\jdk1.8.0_25 (è presente java.exe, javac.exe e il resto)

    Driver jdbc installato in: C:\Program Files (x86)\MySQL\Connector.J 5.1

    Sorgente in: C:\prova

    Variabile CLASSPATH: C:\Program Files (x86)\MySQL\Connector.J 5.1;.;C:\prova

    Compilo, ok, ma quando faccio java DBProva non parte

    jdbc.jpg

    spero adesso che come spiegazione sia abbastanza soddisfacente...

    EDIT adesso rileva i percorsi, ma mi dà l'errore iniziale...

    codice:
    C:\prova>java DBProvajava.sql.SQLException: No suitable driver found for jdbc:mysql://127.0.0.1:3306/
    sakila
            at java.sql.DriverManager.getConnection(Unknown Source)
            at java.sql.DriverManager.getConnection(Unknown Source)
            at DBProva.main(DBProva.java:10)
    
    
    C:\prova>
    Ultima modifica di valerio65; 01-11-2014 a 19:53

  10. #10
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da valerio65 Visualizza il messaggio
    spero adesso che come spiegazione sia abbastanza soddisfacente...
    Sì, già più chiaro ma .... da prompt:

    echo %CLASSPATH%

    se non ti dà quello che tu avevi impostato, qualcosa allora hai sbagliato.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.