# Brauche hilfe bei Delete mit Datum!



## Designer2k5 (23. Jun 2005)

HI Leute!

Man suche und suche und finde nichts, ich hoffe ihr könnt mir helfen!!

Also folgendes Problem. Ich habe ein Delete das hier:


```
String call = "DELETE FROM Zeit_Buchungen" +
                   " WHERE Projektschluessel = "+Integer.parseInt(buchung.get(0).toString()) +
                   " AND Mitarbeiternummer = "+Integer.parseInt(buchung.get(1).toString()) +
                   " AND Datum = " + "\'" + buchung.get(2).toString()+ "\'";
```
 

Also ich habe das Problem das er das Datum nicht annimmt! Also ohne datum geht das ganze, aber mit nein. Hab versucht anhand von ' ' es einzulesen, aber er will mit oder ohne nicht. das Format ist 00.00.0000 auch in der Datenbank. könnt ihr mir bitte helfen danke!! 


Greetz Designer2k5

_L-ectron-X hat Code-Tags gesetzt.
Verschoben nach JDBC_


----------



## Guest (23. Jun 2005)

Verwende PreparedStatement, dann brauchst Du Dich um die
genau Syntax der Datumseinträge nicht zu kümmern.
z.B.
	
	
	
	





```
PreparedStatement ps = connection.prepareStatement(
  "DELETE FROM Zeit_Buchungen "
 +"WHERE Projektschluessel = ? "
 +"  AND Mitarbeiternummer = ? "
 +"  AND Datum = ?"
);
ps.setInt (1, ((Integer)buchung.get(0)).intValue());
ps.setInt (2, ((Integer)buchung.get(1)).intValue());
ps.setTimestamp(3, new java.sql.Timestamp(((java.util.Date)buchung.get(2)).getTime()));
oder
ps.setDate(3, new java.sql.Date(((java.util.Date)buchung.get(2)).getTime()));
```


----------



## Guest (23. Jun 2005)

Noch etwas. Vergesse das PreparedStatement nicht zu schliessen.
Allgemein kann der Aufbau der Methode wir folgt aussehen:
	
	
	
	





```
Connection connection = ...;
PreparedStatement ps = null;

try {
  ps = connection.prepareStatement(...);
  ...
}
catch(SQLException e) {
  Fehlerursache protokollieren + Fehlerbehandlung
}
finally {
  // PreparedStatement vor der Connection schliessen
  try { 
    if(ps != null) 
      ps.close(); 
  } 
  catch(SQLException e) { 
    Fehlerursache protokollieren 
  }

  // Connection schliessen bzw. in ConnectionPool freigeben
  try { 
    if(connection != null) 
      connection.close(); 
  } 
  catch(SQLException e) { 
    Fehlerursache protokollieren 
  }
}
```
Die zwei try-catch-Blöcke in finally sind mit Absicht getrennt.
Wenn das Schliessen des PreparedStatement aus irgendeinem verrückten
Grund scheitert, dann soll die Connection trotzdem freigegeben werden.


----------



## KSG9|sebastian (23. Jun 2005)

Falls du es unbedingt mit nem normalen Statement machen willst:

1.) Verwende StringBuffer, ist wesentlich schneller
2.) Lass dir mal den String ausgeben ( System.out.println(call) )
und poste ihn


----------



## Bleiglanz (23. Jun 2005)

welche db?

YYYY-MM-DD

oder

YYYY-MM-DD hh:mm:ss

ist da ziemlich verbreitet als "literales" Datumsformat


----------

