# java.util.date in java.sql.date wandeln



## slaytallicer (29. Okt 2007)

Hallo, ich möchte ein Datum, welches in Textfelder eingegeben wird, in eine Access-DB schreiben. mit folgendem Code bekomme ich immer folgende Fehlermeldung:
*"setDate(int) in java.util.Date cannot be applied to (java.sql.Date)" an der Stelle "Entleihdatum.setDate(sqlDate1);" und bei "Entleihdatum.setDate(sqlDate2);"*
Hier der Code:

```
public void step4 ( String startday, String startmonth, String startyear, String endday, String endmonth, String endyear, 
           int id, SimpleDateFormat DateFormat)
   {
        
      Date Entleihdatum = null, Rueckgabedatum = null;
      DateFormat formatter = new SimpleDateFormat("dd.MM.yyyy");
      String Date1 = startday+"."+startmonth+"."+startyear;
      String Date2 = endday+"."+endmonth+"."+endyear;
      try {
          Entleihdatum = formatter.parse(Date1); 
          Rueckgabedatum = formatter.parse(Date2);
      }
      catch(ParseException e) {
         e.printStackTrace();
      }
      
        java.sql.Date sqlDate1 = new java.sql.Date(Entleihdatum.getTime());
        java.sql.Date sqlDate2 = new java.sql.Date(Rueckgabedatum.getTime());
        Entleihdatum.setDate(sqlDate1);
        Entleihdatum.setDate(sqlDate2);
      
      e.setDates(Entleihdatum, Rueckgabedatum);
      InsertProg i  = new InsertProg();
		
 		i.speichere(e);
      System.out.println(Entleihdatum+" "+Rueckgabedatum);
      
      
      
   }
```

wenn ich die Zeilen von java.sql.Date.... bis zu i.speichere(e); auskommentiere, dann bekomme ich über den System.out.println-Befehl das Datum angezeigt.

Importiert sind folgedne Klassen:

```
import java.sql.ResultSet;
import java.sql.SQLException;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
```

Weiß jemand, wie ich das Problem lösen kann?


----------



## Guest (29. Okt 2007)

Gehe es einfach systematisch durch und teile eine Aufgabe in Teilaufgaben auf.

Zuerst brauchst du eine Methode, um ein Datum aus Strings zu erstellen. Das könnte
wie folgt aussehen.
	
	
	
	





```
private static final DateFormat DATE_FORMAT = new SimpleDateFormat("dd.MM.yyyy");

public java.util.Date toDate(String day, String month, String year) throws java.text.ParseException {
  java.util.Date result = DATE_FORMAT.parse(
     String.format("%s.%s.%s", day, month, year)
  );
  return result;
}
```
dann sieht der Rest ungefähr so aus
	
	
	
	





```
public void step4 ( int id, java.util.Date startDate, java.util.Date endDate ) {
   // Was auch immer dieses 'e' ist. Und wozu die id?
   e.setDates(new java.sql.Date(startDate.getTime()), new java.sql.Date(endDate.getTime()));
   InsertProg i  = new InsertProg();
   i.speichere(e);
}


Aufruf

try {
   step4( id, toDate(startDay, startMonth, startYear), toDate(endDay, endMonth, endYear) );
}
catch(java.text.ParseException e) {
   // Fehlerbehandlung
}
```


----------



## André Uhres (29. Okt 2007)

slaytallicer hat gesagt.:
			
		

> Hallo, ich möchte ein Datum, welches in Textfelder eingegeben wird, in eine Access-DB schreiben..


Hier ist ein Auszug aus einem funktionierenden Programm:

```
import java.sql.PreparedStatement;
...
    private PreparedStatement stmt;
...
        try {
            //Datenbankverbindung herstellen
            Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
            con = DriverManager.getConnection("jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)};DBQ=" 
                    + DB_PATH + "lots.mdb", "", "");
            System.out.println("Connection Successful ");
            String sql = "insert into lotscsb (numsoc, numpie, numcli, nomcli, datpie, codart, " 
                    + "libart, qteart, uniart, numlot, maraur, abattoir) values(?,?,?,?,?,?,?,?,?,?,?,?)";
            stmt = con.prepareStatement(sql);
        } catch (SQLException ex) {
...
        } catch (ClassNotFoundException ex) {
...
        }
...
                    int j = 1;
...
                    SimpleDateFormat df1 = new SimpleDateFormat("dd.MM.yy");
                    java.util.Date datepiece = null;
                    try {
                        datepiece = df1.parse(datN);
                    } catch (ParseException parseException) {
                        datepiece = new java.util.Date();
                    }
                    stmt.setDate(j++, new java.sql.Date(datepiece.getTime()));
...
```
Ich hoffe, das Beispiel hilft dir.


----------



## slaytallicer (29. Okt 2007)

Vielen Dank für Eure Hilfe!!!!
Hat mit 

```
e.setDates(new java.sql.Date(startDate.getTime()), new java.sql.Date(endDate.getTime()));
```
funktioniert.

@Gast:
das e steht dafür, dass die Methode setDates aus einer anderen Klasse aufgerufen wird. id hat etwas mit der Datenbank zu tun.


----------



## Guest (22. Jan 2008)

Ich bekomme das immer noch nicht hin.

Mit

```
java.sql.Date(startDate.getTime()
```

hole ich mir doch eine Zeit, oder?

In meinem Fall, bekomme ich durch Eingabe des Benutzers ein java.util.Date Objekt

```
Date StartDatum = (Date) dateField1.getValue();
```
Wie mache ich daraus jetzt ein java.sql.Date Objekt

Was ich bisher gefunden habe ist leider deprecated 

Muss ich es jetzt erst in einen String umwandeln und dann wieder von String zurück auf sql.Date?
Das sieht mir so umständlich aus

```
Date StartDatum = (Date) dateField1.getValue();
DateFormat sdfStart = new SimpleDateFormat("yyyy-MM-dd");
String StartDatumString = sdfStart.format(StartDatum);
java.sql.Date DatumSQL = java.sql.Date.valueOf(StartDatumString);
```


----------



## SlaterB (22. Jan 2008)

java.sql.Date(StartDatum.getTime())


> hole ich mir doch eine Zeit, oder? 

'Zeit' beeinhaltet in diesem Fall auch das Datum


----------

