Premessa: entrambe le tue stringhe non sono propriamente corrette, poichè entrambe mancano della componente dei secondi, che è presente sia nei campi DATETIME, che nei campi TIME di MySQL.
Ma si può "sorvolare" questo problema, aggiungendo forzatamente l'informazione a zero o predisponendo gli appositi parser che lo faranno al posto nostro.
Detto questo, quando si ha a che fare con i DB ci si deve sempre rivolgere alle PreparedStatement per avere il pieno controllo dei dati.
Per quanto riguarda il tipo di dato DATETIME, esiste la controparte JDBC java.sql.Timestamp
Per quanto riguarda il tipo di dato TIME, esiste la controparte JDBC java.sql.Time
Entrambi estendono la classe java.util.Date per fornire al driver JDBC gli appositi meccanismi di conversione verso il tipo di dato specifico del DBMS.
Entrambi questi Types prendono nel loro costruttore un istante temporale espresso in millisecondi, quindi tutto si riduce nel parsare le stringhe e costruire gli equivalenti oggetti Date.
Vediamo come ottenere gli oggetti Date dalle tue due stringhe:
// Converto stringhe nel formato "yyyy-MM-dd HH:mm"
String strData = "2025-06-18 12:29";
SimpleDateFormat sdData = new SimpleDateFormat("yyyy-MM-dd HH:mm");
Date miaData = null;
try {
miaData = sdData.parse( strData );
} catch (Exception e) {
// La stringa non rappresenta una data nel formato atteso
}
// Converto stringhe nel formato "HH:mm"
String strOra = "12:45";
SimpleDateFormat sdOra = new SimpleDateFormat("HH:mm");
Date miaOra = null;
try {
miaOra = sdData.parse( strOra );
} catch (Exception e) {
// La stringa non rappresenta un'orario nel formato previsto
}
A questo punto vado a fare gli inserimenti a DB:
Connection con = ...;
PreparedStatement pstmtData = null;
PreparedStatement pstmtOra = null;
try {
pstmtData = con.prepareStatement("INSERT INTO Tabella(campo_data) VALUES(?)");
pstmtData.setTimestamp(1, new java.sql.Timestamp(miaData.getTime()));
pstmtData.executeUpdate();
pstmtOra = con.prepareStatement("INSERT INTO Tabella(campo_ora) VALUES(?)");
pstmtOra.setTimestamp(1, new java.sql.Time(miaOra.getTime()));
pstmtOra.executeUpdate();
} catch (Exception e) {
logger.error("Errore inserendo i dati nel DB", e);
} finally {
if (pstmtOra != null) {
try { pstmtOra.close(); } catch (Exception e) { }
}
if (pstmtData != null) {
try { pstmtData.close(); } catch (Exception e) { }
}
}