MAI eseguire query in quel modo se non si è perfettamente in grado di prevedere quali siano i dati di partenza e, soprattutto, se non si sa perfettamente che questi siano "puliti".
Per eseguire query su un DB quando si hanno dati provenienti dall'utente (quindi non cablati o sotto stretto controllo) si devono usare le PreparedStatement, che si occupano per te di normalizzare i dati:
codice:
java.sql.Date data = ... // data proveniente dall'utente
String testo = ... // testo proveniente dall'utente
// MODO SBAGLIATO!!
String sql = "INSERT INTO tabella(data, testo) VALUES('" + formattaData(data) + "', '" + testo + "');";
...
Statement stmt = con.createStatement( sql );
stmt.executeUpdate();
// MODO CORRETTO
String sql = "INSERT INTO tabella(data, testo) VALUES(?,?);";
...
PreparedStatement pstmt = con.prepareStatement( sql );
pstmt.setDate(1, data);
pstmt.setString(2, testo);
pstmt.executeUpdate();
Nota il "java.sql.Date": quando si lavora con i DB le date sono "rognose". Il tipo di dato "java.sql.Date" serve a sopperire proprio alla diversa forma con cui i DBMS accettano le date.
Per costruire un oggetto java.sql.Date a partire da un oggetto java.util.Date (facilmente ottenibile in tanti modi):
codice:
java.util.Date dataOriginale = ...;
java.sql.Date d = new java.sql.Date( dataOriginale.getTime() );
Ciao.