La soluzione è sempre la stessa: usare le PreparedStatements.
Fai una ricerca sia sul forum, che sul web. Troverai centinaia di discussioni in merito.

Quando si hanno dei dati da passare ad una istruzione SQL si devono usare le PreparedStatements.
MAI scrivere i dati direttamente nell'istruzione SQL.
MAI scrivere i dati in variabili da concatenare nelle istruzioni SQL.

La tua domanda: come faccio ad eseguire una query di quel tipo?

Risposta, così:

codice:
// Costruisco un parser per le date nel formato che mi interessa (ho usato il tuo esempio)
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

// Ottengo un oggetto Date dalla tua stringa
Date d = sdf.parse("2016-01-03 09:04:55");

// Costruisco il PreparedStatement per l'inserimento
// Nota, al posto del valore metto un segnaposto "?"
String sql = "INSERT INTO TableName (DataOggi) VALUES( ? )";
PreparedStatement pstmt = con.prepareStatement( sql );

// Nota, la posizione di ciascun segnaposto è l'indice del parametro (1 based)
pstmt.setDate(1, new java.sql.Date(d.getTime()));

// Eseguo l'insert
pstmt.executeUpdate();

Ciao.