Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12
  1. #1

    Connesione DB perche non và?

    Volevo fare una prova a connettere un app java al db...

    così ho visto la PILLOLA...

    Ho installato EasyPHP e con PhpMyAdmin ho creato un db, ho creato un utente, con password, due tabelle e in una ci ho inserito un record.

    bene

    ho copiato e editato la classe Database dalla pillola:

    Classe Database
    codice:
    package prova;
    
    /*
     * Classe dedicata alla gestione del Database.
     * Gestisce l'apertura e la chiusura della connessione col Database
     * Fornisce i metodi per l'esecuzione delle query sul Database
     */
    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, "botteghino", "teatro"); }
    
       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 {
    
             // Carico il driver JDBC per la connessione con il database MySQL
             Class.forName("com.mysql.jdbc.Driver");
    
             // Controllo che il nome del Database non sia nulla
             if (!nomeDB.equals("")) {
    
                // Controllo se il nome utente va usato o meno per la connessione
                if (nomeUtente.equals("")) {
    
                   // La connessione non richiede nome utente e password
                   db = DriverManager.getConnection("jdbc:mysql://localhost/" + nomeDB);
                } 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
    }
    e poi una classe che realizza il main

    Main.java
    codice:
    package prova;
    import java.sql.*;
    import java.util.Vector;
    public class Main {
    
    	/**
    	 * @param args
    	 */
    	public static void main(String[] args) {
    		Database db = new Database("my_palcoscenico");
    		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 cartellone;" );
    
    //		 Stampiamo i risultati:
    		int i = 0;
    		while ( i<v.size() ) {
    		   String[] record = (String[]) v.elementAt(i);
    		   System.out.println("Record numero " + (i+1) );
    		   for (int j=0; j<record.length; j++) {
    		      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();
    	}
    
    }
    mi restituisce avviandolo:

    Quote Originariamente inviata da Errore
    Errore durante la connessione.
    com.mysql.jdbc.Driver
    Come lo risolvo?

    Lavoro con jBuilder, e ho inserito il file jar di jconnector nella cartella dove si trova i file .java del programma!

    Grazie in anticipo

  2. #2
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    E' un po' che non lavoro con JBuilder, però, ricordo che aggiungeva la cartella del progetto al classpath di sicuro, e pure le cartelle dei compilati. src invece non veniva aggiunta, se non ricordo male.
    Personalmente, utilizzando molte volte il connector, avevo aggiunto l'intera libreria alla lista di librerie sempre visibili al JDK nella configurazione di JBuilder. In questo modo non avrai mai problemi di compilazione ed esecuzione. Altra possibile scelta, soprattutto se vuoi distribuire la tua applicazione come unico file .jar è quella di scompattare (con WinRAR oppure tramire jar del jdk) l'intero contenuto del j-connector.jar (o come si chiama) nella cartella dei class del tuo progetto: in questo modo all'atto della creazione dell'eseguibile tutti i file verranno inseriti nel tuo .jar di distribuzione e l'utente finale non dovrà andare a scaricarsi e configurarsi le librerie opzionali/terze (vedi però di non infrangere i diritti d'autore e le clausole di licenza)
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  3. #3
    mmm
    non ci ho capito un granche...
    anche perche vedendo su google pare che io abbia bisogno di Tomcat, che non ho!!!
    l'ho scricato ma non so come installarlo...

    per il fatto di scompattare il jar ho capito, ma non dove, ti dico la struttura dei salvataggi dei progetti in jbuilder:
    codice:
    c:\
       Jbuilder\
           workspace\
                <progetto>\
                      <package>\
                      .classpath
                      .project

  4. #4
    Sbagliavo io ho fatto come hai detto tu inserendo la libreria al progetto da jbuilder!

    Ma se ne và in loop! perche!?

  5. #5
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    Allora dovresti fare così (prendo in considerazione la versione 2007, quella derivata da Eclipse di cui non sono tanto pratico):

    Salva la libreria j-connector dove vuoi (consiglio jdk\lib\ext\ o jdk\lib\), poi vai nella configurazione di JBuilder:

    "Window" -> "Preferences..." -> "Java" -> "Build Path" -> "User Libraries"

    ed aggiungi lì il percorso al j-connector.
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  6. #6
    Ok grazie ho risolto!
    ma c'è un problema più grave!

    Adesso funge la connessione e visualizza i dati ma

    in output ottengo questo:

    CONSOLE:
    Romeo e giulietta
    Record numero 1
    1
    Romeo e giulietta
    Record numero 1
    1
    ...
    IN LOOP!!!!!!!!!!! :lol:

    Come lo risolvo?

  7. #7
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    sbaglio o i non viene mai incrementanta nel ciclo while?
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  8. #8
    OOOK ho risolto con un incremento di i...

    Ora ho un dubbio, vorrei tentare un inserimento nella tabella...

    se faccio un:

    codice:
    String Inserimento = "INSERT INTO cartellone VALUES('5','machbeth')";
    		db.eseguiAggiornamento(Inserimento);
    Funziona e lo inserisce...

    e se io Id e testo lo voglio inserire da tastiera?
    da una pillola ho preso una classe che realizza l'input da tastiera..
    ma mette il testo in una variabile string e non so come fare...
    cioè se ho id e testo in due variabili string come modifico le linee di codice sopra per renderle valide?

    Ho provato:
    codice:
    		String Inserimento = "INSERT INTO cartellone VALUES('"+ids"','"+tits"')";
    Ma mi dice di eliminare "','"

  9. #9
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    Cerca e usa preparedstatements
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  10. #10
    Grazie..
    Credete che realizzare una applicazione tutta basata sulla console sia uno skifo?
    cioè non sono proprio in grado di programmare in swing...
    peggio tra tutti non riesco neanke a visualizzare un record da qualche parte in una componente di un jframe

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.