Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it
    Registrato dal
    Apr 2011
    Messaggi
    2

    [JAVA + SQL] problema connessione ad un database

    Salve a tutti sono nuovo e spero di aver postato nella sezione corretta....

    Devo connettere una database mysql creato con workbench ad un programma scritto in java.

    ho utilizzato il codice postato in una discussione precedente, questo è il link a cui ho fatto riferimento:
    http://forum.html.it/forum/showthrea...hreadid=801696

    Riesco a connettermi al driver jdbc ma non riesco a connettermi al database.

    Credo di sbagliare qualcosa nell'url che passo al DriverManager per stabilire la connessione anche perchè non riesco a capire come il metodo riesca a "prendere" il database dall'url che gli viene fornito.
    In che formato devo salvare il database da passare!?

    Se non vi è chiaro qualche passaggio cercherò di spiegare meglio cos'ho fatto!

  2. #2

    Re: [JAVA + SQL] problema connessione ad un database

    Originariamente inviato da meco986
    In che formato devo salvare il database da passare!?
    Questa domanda non è chiara. O meglio...sembra che non ti sia chiaro che Mysql non è un dbms file based, è un server DBMS ed i database sono gestiti al sui interno, i cliente fanno delle interrogazioni a lui e non ad un file con una data struttura.

    Originariamente inviato da meco986
    Se non vi è chiaro qualche passaggio cercherò di spiegare meglio cos'ho fatto!
    Posta il codice che usi per connetterti più che altro
    Il centro dell'attenzione non è sempre un buon posto in cui trovarsi

    Mai discutere con uno stupido, la gente potrebbe non capire la differenza. (O. W.)

  3. #3
    Utente di HTML.it
    Registrato dal
    Apr 2011
    Messaggi
    2
    Grazie unomichisiada hai in parte capito il problema, all'uni il prof non mi ha spiegato nulla di mysql e con quello che ho trovato e letto per informarmi non ho capito perfettamente il funzionamento.

    Questo è il codice della classe che effettua la connessione al driver jdbc e al database
    codice:
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.ResultSet;
    import java.sql.ResultSetMetaData;
    import java.sql.Statement;
    import java.util.Vector;
    
    public class Database1 {
    	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 Database1(String nomeDB) {
    		this(nomeDB, "", "");
    	}
    
    	public Database1(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

    mentre questa è la classe contenente il main

    codice:
    import java.util.Vector;
    
    public class Database1Main {
    
    	public static void main(String[] args) {
    		Database1 db = new Database1("Pod","root", "");
    		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 Tbl;");
    
    		// Stampiamo i risultati:
    		int i = 0;
    		while (i < v.size()) {
    			System.out.println("Record numero " + (i + 1));
    			String[] record = (String[]) v.elementAt(i++);
    			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();
    
    	}
    
    }

  4. #4
    Prima di tutto un paio di domande:
    -quale eccezione ottieni?
    -hai incluso il driver jdbc per mysql nel classpath?
    -il tuo dbms risponde in localhost sulla porta standard di mysql?

    In particolare l'ultimo punto è rilevante perché il codice che hai copiato paro paro dalla pillola di LeleFT ha (per semplicità) cablata al suo interno la url di connessione

    codice:
    db = DriverManager.getConnection("jdbc:mysql://localhost/"+ nomeDB);
    ma la cosa può funzionare solo se sono verificate le condizioni che ho espresso, in caso contrario devi cambiare la url di connessione (ancora meglio parametrizzala nel codice)
    Il centro dell'attenzione non è sempre un buon posto in cui trovarsi

    Mai discutere con uno stupido, la gente potrebbe non capire la differenza. (O. W.)

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.