15

これは多くの質問が寄せられていることに気づきました。実際に見てみました。私は何時間もかけて周りを見回し、これを理解しようとしました。説明、日付、開始時刻、および終了時刻を含む予定のリストをデータベースに格納するプログラムを作成することになっています。予定を追加またはキャンセルするには、ユーザーからの入力を取得する必要があるため、私が知る限り、文字列を日付に変換する必要があります。

これらは私のインポートです: import java.io.File; import java.io.IOException; java.sql.Connection をインポートします。java.sql.Date をインポートします。import java.sql.PreparedStatement; java.sql.ResultSet をインポートします。java.sql.ResultSetMetaData をインポートします。import java.sql.SQLException; java.sql.Time をインポートします。java.text.DateFormat をインポートします。import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.ArrayList; java.util.Scanner をインポートします。

ご覧のとおり、java.util.Date はありません。エラーが発生するビットは次のとおりです。

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;
}

私はそれに java.sql.Dates を追加し、それを機能させようとしてたくさんいじりましたが、それでも私にこれを与えています:

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

私が間違っていることや、これを機能させる方法についてのアイデアは大歓迎です。

編集:これを呼び出しているコードを少し追加すると役立つと思いましたので、それをどのように使用しようとしているのかがより明確になるかもしれません。 ) が呼び出され、どこに行くのか。

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
    }
}
4

9 に答える 9

3

これはうまくいくはずです:

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;
}
于 2013-08-26T07:19:09.067 に答える
2

java.sql.Datejava.util.Dateは 2 つの異なるクラスです。SQL 日付を Calendar と互換性のある util 日付に変換する必要があります。

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

およびその逆

  java.sql.Date sqlDate =  new java.sql.Date(jDate.getTime());
于 2013-08-26T07:17:16.213 に答える
1
   sqlDate = new java.sql.Date(apptDay.getTime());
于 2013-08-26T07:17:55.030 に答える
1
Date.valueOf(scanner.nextLine())
于 2015-10-13T09:01:19.707 に答える
1
String strDate = scanner.nextLine();

SimpleDateFormat format= new SimpleDateFormat("yyyy-MM-dd");
java.util.Date date = format.parse(strDate);
于 2015-10-13T11:37:58.963 に答える