Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1
    Utente di HTML.it
    Registrato dal
    Nov 2006
    Messaggi
    4

    Per l'ennesima volta la connessione di DB mysql


    Ho scritto queste due classi (ho cominciato da poco a usare java...)





    package lettoredb2;

    import javax.swing.*;
    import java.awt.*;
    import java.sql.*;
    import java.util.Vector;

    public class Pannello extends JPanel{

    public void paintComponent(Graphics g){

    super.paintComponent(g);


    Database db = new Database("jdbc:mysql:\\localhost\\Prova:3306",""," ");
    //modifica rispetto all'originale
    if ( !db.connetti() ) {
    System.out.println("Errore durante la connessione.");
    System.out.println( db.getErrore() );
    System.exit(0);
    }

    // Eseguo una query sul database. La tabella si chiama Tbl.
    Vector v = db.eseguiQuery( "SELECT * FROM laurea;" );

    // Stampiamo i risultati:
    int i = 0;
    while ( i<v.size() ) {
    String[] record = (String[]) v.elementAt(i++);
    g.drawString("Record numero " + (i+1),X,Y+(i*10));
    //System.out.println("Record numero " + (i+1) );
    for (int j=0; j<record.length; j++) {
    g.drawString(record[j],X+50,Y+(i*10));
    //System.out.println( record[j] );
    }
    }


    // Eseguo un aggiornamento sul campo 'nomecampo' della tabella Tbl:
    /*if ( !db.eseguiAggiornamento("UPDATE Tbl SET nomecampo=valore WHERE nomecampo>0;") ) {
    System.out.println("Errore nell'aggiornamento!");
    System.out.println( db.getErrore() );
    }*/

    // Ora chiudo la connessione col Database:
    db.disconnetti();




    //for (int i=0; i<50; i=i+10)
    //g.drawString("TEST!",X,Y+i);

    }

    public static final int X =5;
    public static final int Y =10;
    }



    package lettoredb2;
    import java.sql.*;
    import java.util.Vector;



    public class Database {
    private String nomeDB; // Nome del Database a cui connettersi
    private String nomeUtente; // Nome utente utilizzato per la connessione al Database
    private String pwdUtente; // Password usata per la connessione al Database
    private String errore; // Raccoglie informazioni riguardo l'ultima eccezione sollevata
    private Connection db; // La connessione col Database
    private boolean connesso; // Flag che indica se la connessione è attiva o meno

    public Database(String nomeDB) { this(nomeDB, "", ""); }

    public Database(String nomeDB, String nomeUtente, String pwdUtente) {
    this.nomeDB = nomeDB;
    this.nomeUtente = nomeUtente;
    this.pwdUtente = pwdUtente;
    connesso = false;
    errore = "";
    }

    // Apre la connessione con il Database
    public boolean connetti() {
    connesso = false;

    try {

    System.out.println("prova");

    // Carico il driver JDBC per la connessione con il database MySQL
    Class.forName("com.mysql.jdbc.Driver");

    System.out.println("Nome DB = " +nomeDB);
    // Controllo che il nome del Database non sia nulla
    if (!nomeDB.equals("")) {
    System.out.println("Errore1");

    // Controllo se il nome utente va usato o meno per la connessione
    if (nomeUtente.equals("")) {
    System.out.println("Errore2");

    // La connessione non richiede nome utente e password
    db = DriverManager.getConnection("jdbc:mysql://localhost/" + nomeDB);
    //modifica rispetto all'originale
    } else {

    // La connessione richiede nome utente, controllo se necessita anche della password
    if (pwdUtente.equals("")) {

    // La connessione non necessita di password
    db = DriverManager.getConnection("jdbc:mysql://localhost/" + nomeDB + "?user=" + nomeUtente);
    } else {

    // La connessione necessita della password
    db = DriverManager.getConnection("jdbc:mysql://localhost/" + nomeDB + "?user=" + nomeUtente + "&password=" + pwdUtente);
    }
    }

    // La connessione è avvenuta con successo
    connesso = true;
    } else {
    System.out.println("Manca il nome del database!!");
    System.out.println("Scrivere il nome del database da utilizzare all'interno del file \"config.xml\"");
    System.exit(0);
    }
    } catch (Exception e) { errore = e.getMessage(); }
    return connesso;
    }

    // Esegue una query di selezione dati sul Database
    // query: una stringa che rappresenta un'istruzione SQL di tipo SELECT da eseguire
    // colonne: il numero di colonne di cui sarà composta la tupla del risultato
    // ritorna un Vector contenente tutte le tuple del risultato
    public Vector eseguiQuery(String query) {
    Vector v = null;
    String [] record;
    int colonne = 0;
    try {
    Statement stmt = db.createStatement(); // Creo lo Statement per l'esecuzione della query
    ResultSet rs = stmt.executeQuery(query); // Ottengo il ResultSet dell'esecuzione della query
    v = new Vector();
    ResultSetMetaData rsmd = rs.getMetaData();
    colonne = rsmd.getColumnCount();

    while(rs.next()) { // Creo il vettore risultato scorrendo tutto il ResultSet
    record = new String[colonne];
    for (int i=0; i<colonne; i++) record[i] = rs.getString(i+1);
    v.add( (String[]) record.clone() );
    }
    rs.close(); // Chiudo il ResultSet
    stmt.close(); // Chiudo lo Statement
    } catch (Exception e) { e.printStackTrace(); errore = e.getMessage(); }

    return v;
    }

    // Esegue una query di aggiornamento sul Database
    // query: una stringa che rappresenta un'istuzione SQL di tipo UPDATE da eseguire
    // ritorna TRUE se l'esecuzione è adata a buon fine, FALSE se c'è stata un'eccezione
    public boolean eseguiAggiornamento(String query) {
    int numero = 0;
    boolean risultato = false;
    try {
    Statement stmt = db.createStatement();
    numero = stmt.executeUpdate(query);
    risultato = true;
    stmt.close();
    } catch (Exception e) {
    e.printStackTrace();
    errore = e.getMessage();
    risultato = false;
    }
    return risultato;
    }

    // Chiude la connessione con il Database
    public void disconnetti() {
    try {
    db.close();
    connesso = false;
    } catch (Exception e) { e.printStackTrace(); }
    }

    public boolean isConnesso() { return connesso; } // Ritorna TRUE se la connessione con il Database è attiva
    public String getErrore() { return errore; } // Ritorna il messaggio d'errore dell'ultima eccezione sollevata
    }


    naturalmente sono le solite due classi (solo che la prima l'ho messa in un pannello dato che vorrei vedere i risultati) e il problema è sempre quello:

    prova //è la scrittura che si trova prima del Class.forName("com.mysql.jdbc.Driver");
    Errore durante la connessione.
    com.mysql.jdbc.Driver

    grazie a quel prova ho la certezza che il programma si blocchi li...
    1)ho scompattato il jar del driver dentro la cartella dell'applicazione
    2)il mio database si chiama "prova" e una delle sue tabelle si chiama "laurea"
    3)uso easyphp (attraverso il quale ho installato mysql)
    4)lavoro su un pc del laboratorio universitario, quindi mi scordo beatamente di avere i privilegi di root...

    non riesco proprio a capire il problema(ho seguito tutte le indicazioni della pillola e anche alcune prese da post vari).
    Spero che sappiate indicarmi la retta via
    Andrea

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Non so dove tu abbia visto nella mia pillola questa cosa qui:
    codice:
    Database db = new Database("jdbc:mysql:\\localhost\\Prova:3306","","");
    Il primo parametro dovrebbe essere il nome del database da utilizzare, quindi, nel tuo caso, dovresti scrivere solo "prova".

    Gli altri due parametri sono il nome utente e la password da utilizzare per la connessione al server di MySQL. Essendo un laboratorio universitario dubito che tu abbia accesso anonimo (anche se non lo escludo a priori).


    Poi, come suggerimento, la prossima volta cerca di usare i tag [*CODE] e [*/CODE] previsti dal forum per la scrittura del codice, altrimenti il post risulta di difficile lettura.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  3. #3
    Utente di HTML.it
    Registrato dal
    Nov 2006
    Messaggi
    4
    ti ringrazio per la risposta ma il problema persiste

    ho cambiato quella riga con
    [*CODE]
    Database db = new Database("prova","nome","pass");
    [*/CODE]

    [*CODE]
    System.out.println("prova");

    // Carico il driver JDBC per la connessione con il database MySQL
    Class.forName("com.mysql.jdbc.Driver");

    System.out.println("Nome DB = " +nomeDB);
    [*/CODE]

    come sempre si ferma su quella bellissima riga di codica


    ma non esiste un modo per sapere qual'è il tipo di errore (se non trova il driver, se non trova il database, se non trova un qualsiasi cosa)?

  4. #4
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Se si ferma lì, significa che non riesce a caricare il Connector-J.
    Sei sicuro di queste cose:

    1) Il JAR del Connector-J è stato decompresso nella directory della tua applicazione
    2) Il CLASSPATH è impostato correttamente? (meglio se non esiste proprio!!)


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  5. #5
    Utente di HTML.it
    Registrato dal
    Nov 2006
    Messaggi
    4
    ho scompattato il jar dentro la cartella dell'applicazione... infatti quando ho compilato (uso netbeans...) ha preso tutti i files e li ha messi nella cartella dove gira l'applicazione

    la strada del classpath l'ho provata... ma dato che non cambiava una virgola ho cancellato l'inserimento che avevo fatto io (e quindi penso che dovrebbe essere tornato tutto come prima)

    Andrea

  6. #6
    Ciao a tutti

    Sono riuscito a configurare il driver per connettere la mia applet java ad un database mysql..

    Il problema è: ci sono servizi di web hosting che mi permettono di collegare questa applet ad un database mysql (e quindi con il driver configurato) oppure bisogna per forza affittarsi un server dedicato o virtuale che sia?

    Grazie
    Il Mondo è tutto un programma..

  7. #7
    Originariamente inviato da Chewingum
    Ciao a tutti

    Sono riuscito a configurare il driver per connettere la mia applet java ad un database mysql..

    Il problema è: ci sono servizi di web hosting che mi permettono di collegare questa applet ad un database mysql (e quindi con il driver configurato) oppure bisogna per forza affittarsi un server dedicato o virtuale che sia?

    Grazie
    Mi potresti dire come hai fatto? Ho il tuo stesso problema...

  8. #8
    Originariamente inviato da Petelicchio
    Mi potresti dire come hai fatto? Ho il tuo stesso problema...
    Era una stupidaggine: non avevo incluso il classpath!

  9. #9
    L'ho fatto un po' di tempo fa ma se non sbaglio ho fatto così:

    Dopo aver preso il driver (che è in formato .jar), l'ho preso (senza scompattarlo) e l'ho messo nella dir jre\bin\ext che trovi nella cartella della j2sdk (la cartella principale di java)..

    Poi ho avviato il prompt dei comandi ed ho configurato la var CLASSPATH

    Dopodichè se non sbaglio ho riavviato..

    Poi facendo la compilazione non dovrebbe dare nessun errore..

    Ultimo passaggio importante: bisogna richiamare nella pagina html (dove stai mettendo la tua applet) di nuovo il driver .jar

    Per cui ho copiato il driver anche nella cartella dove ho il file html...(sempre senza scompattarlo)


    Le righe html sono le seguenti..

    <html>
    <body>
    <APPLET CODE="NOME_APPLET.class" archive="NOME_DRIVER.jar" WIDTH=300 HEIGHT=300>
    </APPLET>
    </body>
    </html>

    Senza mettere "archive="NOME_DRIVER.jar" non funzionava comunque anche avendo configurato correttamente la variabile d'ambiente CLASSPATH

    Il Mondo è tutto un programma..

  10. #10
    Originariamente inviato da Petelicchio
    Era una stupidaggine: non avevo incluso il classpath!
    OK l'importante è che hai risolto
    Il Mondo è tutto un programma..

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.