postgres
27-12-2009, 19:00
Ciao tutti.
Qualcuno sa qual'è il codice per collegarsi correttamente a un DB MySQL con JAVA e la JDBC???
Io ho visto 3 esempi ma non ne funziona nessuno per un motivo o per un altro!
primo pezzo che non funziona in esecuzione:
import java.sql.*;
public class JDBCApp {
public static void main (String args[]) {
try {
// Carichiamo un driver di tipo 1 (bridge jdbc-odbc)
String driver = "sun.jdbc.odbc.JdbcOdbcDriver";
Class.forName(driver);
// Creiamo la stringa di connessione
String url = "jdbc:odbc:myDataSource";
// Otteniamo una connessione con username e password
Connection con =
DriverManager.getConnection (url, "", "");
// Creiamo un oggetto Statement per poter interrogare il db
Statement cmd = con.createStatement ();
// Eseguiamo una query e immagazziniamone i risultati
// in un oggetto ResultSet
String qry = "SELECT * FROM user";
ResultSet res = cmd.executeQuery(qry);
// Stampiamone i risultati riga per riga
while (res.next()) {
System.out.println(res.getString("columnName1"));
System.out.println(res.getString("columnName2"));
}
res.close();
cmd.close();
con.close();
} catch (SQLException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
}
con relativo errore in esecuzione:
java.lang.ClassNotFoundException: sun.jdbc.odbc.JdbcOdbcDriver
at java.net.URLClassLoader$1.run(URLClassLoader.java:217)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:205)
at java.lang.ClassLoader.loadClass(ClassLoader.java:319)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:294)
at java.lang.ClassLoader.loadClass(ClassLoader.java:264)
at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:332)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:186)
at JDBCApp.main(JDBCApp.java:8)
secondo pezzo trovato che non funziona:
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 ....) { this(...., "", ""); }
public Database(String ...., String ...., String ....) {
this.nomeDB = ;
this.nomeUtente = ;
this.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 relativo errore in esecuzione:
Exception in thread "main" java.lang.NoClassDefFoundError: Database
Caused by: java.lang.ClassNotFoundException: Database
at java.net.URLClassLoader$1.run(URLClassLoader.java:217)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:205)
at java.lang.ClassLoader.loadClass(ClassLoader.java:319)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:294)
at java.lang.ClassLoader.loadClass(ClassLoader.java:264)
at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:332)
Could not find the main class: Database. Program will exit.
Infine qui http://www.soulbit.org/blog/come-connessione-a-mysql-con-le-servlet-java-database-e-jdbc
ho trovato un aiuto ma il codice che c'è li da errori pure in compilazione!!!
Ma possibile che sia così complicato?
Io uso Ubuntu 9.10 e i file java li compilo ed eseguo da terminale.
Se potete aiutarmi ve ne sarò grato!
Qualcuno sa qual'è il codice per collegarsi correttamente a un DB MySQL con JAVA e la JDBC???
Io ho visto 3 esempi ma non ne funziona nessuno per un motivo o per un altro!
primo pezzo che non funziona in esecuzione:
import java.sql.*;
public class JDBCApp {
public static void main (String args[]) {
try {
// Carichiamo un driver di tipo 1 (bridge jdbc-odbc)
String driver = "sun.jdbc.odbc.JdbcOdbcDriver";
Class.forName(driver);
// Creiamo la stringa di connessione
String url = "jdbc:odbc:myDataSource";
// Otteniamo una connessione con username e password
Connection con =
DriverManager.getConnection (url, "", "");
// Creiamo un oggetto Statement per poter interrogare il db
Statement cmd = con.createStatement ();
// Eseguiamo una query e immagazziniamone i risultati
// in un oggetto ResultSet
String qry = "SELECT * FROM user";
ResultSet res = cmd.executeQuery(qry);
// Stampiamone i risultati riga per riga
while (res.next()) {
System.out.println(res.getString("columnName1"));
System.out.println(res.getString("columnName2"));
}
res.close();
cmd.close();
con.close();
} catch (SQLException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
}
con relativo errore in esecuzione:
java.lang.ClassNotFoundException: sun.jdbc.odbc.JdbcOdbcDriver
at java.net.URLClassLoader$1.run(URLClassLoader.java:217)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:205)
at java.lang.ClassLoader.loadClass(ClassLoader.java:319)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:294)
at java.lang.ClassLoader.loadClass(ClassLoader.java:264)
at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:332)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:186)
at JDBCApp.main(JDBCApp.java:8)
secondo pezzo trovato che non funziona:
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 ....) { this(...., "", ""); }
public Database(String ...., String ...., String ....) {
this.nomeDB = ;
this.nomeUtente = ;
this.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 relativo errore in esecuzione:
Exception in thread "main" java.lang.NoClassDefFoundError: Database
Caused by: java.lang.ClassNotFoundException: Database
at java.net.URLClassLoader$1.run(URLClassLoader.java:217)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:205)
at java.lang.ClassLoader.loadClass(ClassLoader.java:319)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:294)
at java.lang.ClassLoader.loadClass(ClassLoader.java:264)
at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:332)
Could not find the main class: Database. Program will exit.
Infine qui http://www.soulbit.org/blog/come-connessione-a-mysql-con-le-servlet-java-database-e-jdbc
ho trovato un aiuto ma il codice che c'è li da errori pure in compilazione!!!
Ma possibile che sia così complicato?
Io uso Ubuntu 9.10 e i file java li compilo ed eseguo da terminale.
Se potete aiutarmi ve ne sarò grato!