it-swarm.com.de

Zeichenfolge zu Java.sql.Date

Ich weiß, dass das viel gefragt wurde. Ich habe tatsächlich geschaut. Ich habe stundenlang herumgeschaut und versucht, das herauszufinden. Ich soll ein Programm erstellen, das die Anzahl von Terminen in einer Datenbank mit Beschreibung, Datum, Startzeit und Endzeit speichert. Es muss vom Benutzer eingegeben werden, um Termine hinzuzufügen oder abzusagen. Wenn ich weiß, bedeutet das, dass ich eine Zeichenfolge in ein Datum konvertieren muss. 

Das sind meine Importe: Java.io.File importieren; importieren Sie Java.io.IOException; Import Java.sql.Connection; Import Java.sql.Date; import Java.sql.PreparedStatement; import Java.sql.ResultSet; import Java.sql.ResultSetMetaData; importieren Sie Java.sql.SQLException; import Java.sql.Time; importieren Sie Java.text.DateFormat; importieren Sie Java.text.ParseException; importieren Sie Java.text.SimpleDateFormat; import Java.util.ArrayList; Importieren von Java.util.Scanner;

Wie Sie sehen können, gibt es kein Java.util.Date. Hier ist das Bit, wo ich den Fehler bekomme:

private static Java.sql.Date getDay()
{
    Scanner in = new Scanner(System.in);
    String input;
    Date apptDay = null;
    DateFormat df = new SimpleDateFormat("yyyy/MM/dd");
    Java.sql.Date sqlDate;
    System.out.println("\nPlease enter the date of the appointment, format: yyyy/mm/dd");
    while(apptDay == null)
    {
        try
        {
            input = in.next();
            apptDay = (Date) df.parse(input);
        }
        catch(ParseException e)
        {
            System.out.println("Please enter a valid date! Format is yyyy/mm/dd");
        }
    }
    sqlDate = new Date(apptDay.getTime());
    return sqlDate;
}

Ich habe Java.sql.Dates hinzugefügt und damit eine Menge herumgefahren, die versucht, es zum Laufen zu bringen, aber es gibt mir immer noch folgendes:

Exception in thread "main" Java.lang.ClassCastException: Java.util.Date cannot be cast to Java.sql.Date at Calendar.getDay(Calendar.Java:47)

Irgendwelche Ideen, was ich falsch mache oder wie man diese Arbeit machen kann, wären sehr dankbar.

Edit: Ich dachte, es wäre vielleicht hilfreich, wenn ich etwas Code hinzufüge, der dies aufruft. Vielleicht wird es klarer, wie ich es versuche. Also hier die addAppointment () -Methode, damit Sie sehen, wo getDay ( ) wird gerufen und wohin es geht.

public static void addAppointment() throws SQLException
{
    //get the info
    String desc = getDesc();
    Java.sql.Date apptDay = getDay();
    Time[] times = getTime();
    Time startTime = times[0];
    Time endTime = times[1];
    int key;

    Connection conn = SimpleDataSource.getConnection(); //connect to the database

    try
    {
        PreparedStatement max = conn.prepareStatement("SELECT MAX(ID) FROM Calendar");
        ResultSet result = max.executeQuery();
        key = result.getInt("ID") + 1; 
        PreparedStatement stat = conn.prepareStatement(
                "INSERT INTO Calendar " +
                "VALUES (?, ?, ?, ?, ?)"); 
        stat.setInt(1, key);
        stat.setString(2, desc); 
        stat.setDate(3, apptDay);
        stat.setTime(4, startTime);
        stat.setTime(5, endTime);
        stat.execute();
        System.out.println("\nAppointment added!\n");
    }
    finally
    {
        conn.close(); //finished with the database
    }
}
10
Tajha

Es wäre viel einfacher, das Eingabeformat in yyyy-MM-dd zu ändern und die Java.sql.Date.valueOf(String date)-Methode zu verwenden, die einen String im obigen Format direkt in einen Java.sql.Date-Wert konvertiert.

33

Das sollte funktionieren:

private static Java.sql.Date getDay()
{
    Scanner in = new Scanner(System.in);
    String input;
    Date apptDay = null;
    DateFormat df = new SimpleDateFormat("yyyy/MM/dd");
    Java.sql.Date sqlDate;
    System.out.println("\nPlease enter the date of the appointment, format: yyyy/mm/dd");
    while(apptDay == null)
    {
        try
        {
            input = in.next();
            apptDay = (Date) df.parse(input);
        }
        catch(ParseException e)
        {
            System.out.println("Please enter a valid date! Format is yyyy/mm/dd");
        }
    }
    sqlDate = new Java.sql.Date(apptDay.getTime());
    return sqlDate;
}
3
Jainendra

Die folgende Anweisung hat den Fehler verursacht:

apptDay = (Java.sql.Date) df.parse(input);

Tatsächlich ist der Typ des Rückgabewerts von Java.text.DateFormat.parse(String)Java.util.Date, was mit Java.sql.Date nicht vergleichbar ist.

In Ihrer Situation ist es am einfachsten, Java.util.Date anstelle von Java.sql.Date zu verwenden.

Noch ein Hinweis: Ihr Klassenname Calendar ist mit Java.util.Calendar doppelt vorhanden. Es ist kein guter Codierstil, Klassennamen zu verwenden, die bereits von der Standardbibliothek verwendet werden.

2
wxl24life
String strDate = scanner.nextLine();

SimpleDateFormat format= new SimpleDateFormat("yyyy-MM-dd");
Java.util.Date date = format.parse(strDate);
1
Eun Chong Lim
Date.valueOf(scanner.nextLine())
1
Eun Chong Lim

Java.sql.Date und Java.util.Date sind zwei verschiedene Klassen. Sie müssen das SQL-Datum in ein mit Kalender kompatibles Nutzungsdatum konvertieren.

  Date jDate =  new Date(sqlDate.getTime());

und umgekehrt

  Java.sql.Date sqlDate =  new Java.sql.Date(jDate.getTime());
1
rocketboy
   sqlDate = new Java.sql.Date(apptDay.getTime());
1
Maurice Perry

Versuchen Sie unten Methode -

private static Java.sql.Date getDay() throws SQLException {
    Scanner in = new Scanner(System.in);
    String input;
    Java.util.Date utilDay = null;
    DateFormat df = new SimpleDateFormat("yyyy-mm-dd");
    System.out.println("\nPlease enter the date of the appointment, format: yyyy-mm-dd");
    while(utilDay == null){
        try{
            input = in.next();
            utilDay = (Java.util.Date) df.parse(input);
        }catch(ParseException e){
            System.out.println("Please enter a valid date! Format is yyyy/mm/dd");
        }
   }

   Java.sql.Date sqlDate = new Java.sql.Date(utilDay.getTime());
   return sqlDate;
}

Und von main()-Methode rufen Sie diese Methode auf -

Date birthday = getDay();