web-dev-qa-db-ja.com

Java.sql.Dateへの文字列

これは多くのことを尋ねられたことに気づきました。実際に見ました。私は何時間も見て回って、これを理解しようとしました。私は、説明、日付、開始時間、終了時間とともに、予定のリストに相当するものをデータベースに保存するプログラムを作成することになっています。予定を追加またはキャンセルするには、ユーザーからの入力を受け取る必要があります。つまり、文字列を日付に変換する必要があるということを知っている限りです。

これらは私のインポートです:import Java.io.File; import Java.io.IOException; import Java.sql.Connection; import Java.sql.Date; import Java.sql.PreparedStatement; import Java.sql.ResultSet; import Java.sql.ResultSetMetaData; import Java.sql.SQLException; import Java.sql.Time; import Java.text.DateFormat; import Java.text.ParseException; import Java.text.SimpleDateFormat; import Java.util.ArrayList; import 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)

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

編集:これを呼び出しているコードを少し追加すると役立つと思ったので、使用方法がより明確になるので、addAppointment()メソッドがありますので、getDay( )が呼び出されており、どこに向かっています。

_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

入力形式を_yyyy-MM-dd_に変更し、上記の形式の文字列をJava.sql.Date値に直接変換するJava.sql.Date.valueOf(String date)メソッドを使用する方がはるかに簡単です。

35

これは動作するはずです:

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

次のステートメントがエラーの原因です。

_apptDay = (Java.sql.Date) df.parse(input);
_

実際、Java.text.DateFormat.parse(String)の戻り値の型は_Java.util.Date_であり、これは_Java.sql.Date_と比較できません。

あなたの状況では、最も簡単な方法は_Java.util.Date_の代わりに_Java.sql.Date_を使用することです。

別の注意:クラス名Calendarは_Java.util.Calendar_と重複しています。また、標準ライブラリで既に使用されているクラス名を使用することは、良いコーディングスタイルではありません。

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およびJava.util.Dateは2つの異なるクラスです。 SQLの日付を、カレンダーと互換性のあるutilの日付に変換する必要があります。

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

およびその逆

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

以下の方法を試してください-

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

そして、main()メソッドから、このメソッドを呼び出します-

_Date birthday = getDay();
_