Java - String to java.sql.Date

Hallo, ich hätte mal wieder eine Frage. Nun geht es eher jedoch um Java. Da es leider keinen Datentyp Datetime gibt, habe ich “timestamp without timezone” benutzt und wollte für diesen über eine Seite nun Uhrzeiten eintragen. Also es soll nicht die Zeit des Eintrages eingetragen werden, sondern eine frei wählbare Uhrzeit. Dies wollte ich folgendermaßen umsetzen:

String test="2013-03-16 16:00:00";
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date start = format.parse(test);

PreparedStatement pstmt = con.prepareStatement("INSERT INTO prak_versuche_fbe(datumstart) VALUES (?)");
pstmt.clearParameters();	
pstmt.setDate(1,new java.sql.Date(ende2.getTime()));

Dann bekomme ich jedoch immer die Fehlermeldung das man ein java.util.Date nicht in ein java.sql.Date umwandeln kann.
Ist der timestamp in der Datenbank daher wahrscheinlich der falsche Datentyp und ich müsste eher auf zwei verschiedene Variablen (DATE & TIME) umswitchen, oder wie könnte man dieses Problem lösen?

Gruß Ulti

datetime ist kein standard SQL Datentyp. In standard SQL ist der Datentyp der Zeit und Datum enthält “timestamp” und Postgres hält sich daran.

Vollkommen richtige Wahl.

Du solltest mal die JavaDocs lesen. Ein java.sql.Date schneidet immer die Uhrzeit ab.

Kopiert von: Date (Java Platform SE 6)

Du willst ein java.sql.Timestamp

Das folgende funktioniert bei mir:

String test="2013-03-16 16:00:00";
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date start = format.parse(test);

PreparedStatement pstmt = con.prepareStatement("INSERT INTO prak_versuche_fbe(datumstart) VALUES (?)");
// clear parameters ist vollkommen überflüssig, da das PreparedStatement gerade erst erstellt wurde
pstmt.setTimestamp(1,new java.sql.Timestamp(start.getTime()));

Wow, erstmal vielen Dank, hat nun auch geklappt. Das DATETIME gar kein Standard SQL Datentyp ist, war mir bislang gar nicht bewusst, vielen Dank auch für diese Information!
Verstehe aber nicht wieso die Uhrzeit im java.sql.date dabei ist, obwohl diese sowieso nicht angezeigt bzw mitgeteilt wird?
Außerdem wüsste ich noch gerne wofür die clear Parameter Funktion dann genau da ist? Ich hatte damals verstanden das man diese benötigt, wenn man ein INSERT erstellt.

Weil java.sql.Date nur ein dünner Wrapper um java.util.Date ist, und da ist immer eine Uhrzeit dabei.
Es gibt halt keine Java Klasse die nur ein Datum enthält.

Eigentlich braucht man den nur, wenn man das gleiche PreparedStatement mehrfach ausführt und sicher gehen will, dass alle vorherigen Parameter auch wirklich gelöscht wurden. Allerdings sollt man ja eh immer alle Parameter (via setXXX()) füllen, insofern ist die Methode eigentlich nur in Ausnahmefällen wirklich erforderlich