Quando si ha a che fare con i DB bisogna guardare al package java.sql e, soprattutto, bisogna utilizzare i PreparedStatement, così da non doversi preoccupare della formattazione di alcunché.
Quindi, per memorizzare un valore in un campo di tipo DATE, si usa il metodo setDate() di PreparedStatement che prende un oggetto java.sql.Date (da notare che è una sottoclasse di java.util.Date, che però, in questo caso, non c'entra poi molto).
Per memorizzare un valore in un campo di tipo DATETIME, si usa il metodo setTimestamp() di PreparedStatement che prende un oggetto java.sql.Timestamp.
Se hai un oggetto java.util.Date puoi ottenere un java.sql.Date o un java.sql.Timestamp semplicemente sfruttando il metodo getTime() dell'oggetto java.util.Date da passare al costruttore di ciascuna delle due classi:
java.util.Date tuaData = ...;
java.sql.Date dataDB = new java.sql.Date( tuaData.getTime() );
java.sql.Timestamp ts = new java.sql.Timestamp( tuaData.getTime() );
Sarà il driver JDBC ad occuparsi di formattare correttamente i due valori per il database che c'è sotto.
Supponendo di voler inserire quei due oggetti in una tabella con i due campi (data1 di tipo DATE e data2 di tipo DATETIME):
PreparedStatement pstmt = null;
try {
pstmt = con.prepareStatement("INSERT INTO tabella(data1, data2) VALUES (?, ?)");
pstmt.setDate(1, dataDB);
pstmt.setTimestamp(2, ts);
pstmt.executeUpdate();
} catch (Exception e) {
e.printStackTrace();
} finally {
if (pstmt != null) {
try { pstmt.close(); } catch (Exception e) { }
}
}
Ciao.