0

テーブルからエンティティを作成しました。これが私の従業員の実体です。

クラスEmp{文字列ID、java.sql.date joinDate}

to_date()はJPAには適用されないことがわかりますが、jpaを使用して、同じ形式2010-12-25T12:00:00で結合日をデータベースに永続化するにはどうすればよいですか。

この形式yyyy-MM-dd'T'HH:mm:ssを指定するにはどうすればよいですか。

後で、(yyyy-mm-dd)2010-12-25の形式で参加している従業員を検索して、データベースからすべての値を取得できるようにします2010-12-25T12:00:00 2010-12 -25T11:00:00 2010-12-25T10:05:00

@NamedQuery(name = "getEmployeeByDate"、query = "select p from Emp p where p.joinDate =?")

4

3 に答える 3

1

分析

データの保存方法とデータのプレビュー方法が混在しています。データベースはフォーマットを気にしませんが、ユーザーは気にします。

TemporalTypeを使用してデータベースに日付を格納します。日付、時刻、タイムスタンプの 3 つの形式があります。

DateFormatを使用してユーザーに日付をプレビュー: yyyy-MM-dd、yyyy-MM-dd'T'HH:mm:ss など。

dateの不要な部分を削除して、指定された日付の任意の部分 (形式を無視して) でデータベースをクエリします。

解決

2 つの日付が必要です。1 つは今日の 00:00 と明日の 00:00 を表し、1 日 24 時間をカバーします。両方の日付から時間を削除し、クエリに渡します。

Date fromTimestamp = new Date();
Date toTimestamp = new Date();
Date fromDate = DateHelper.getDateWithoutTime(fromTimestamp);
Date toDate = DateHelper.getDateWithoutTime(
                    DateHelper.getTomorrowDate(toTimestamp));

//DateHelper.java
public static Date getDateWithoutTime(Date date) {
    Calendar cal = Calendar.getInstance();
    cal.setTime(date);
    cal.set(Calendar.HOUR_OF_DAY, 0);
    cal.set(Calendar.MINUTE, 0);
    cal.set(Calendar.SECOND, 0);
    cal.set(Calendar.MILLISECOND, 0);
    return cal.getTime();
}

public static Date getTomorrowDate(Date date) {
    Calendar cal = Calendar.getInstance();
    cal.setTime(date);
    cal.add(Calendar.DATE, 1);
    return cal.getTime();
}

2 つのパラメーターを使用するようにクエリを更新します。

@NamedQuery(name="getEmployeeByDate",
    query="select p from Emp p where p.joinDate >= ? and p.joinDate <= ?") 
于 2012-07-13T06:14:14.520 に答える
1

日付値「2010-12-25T12:00:00」をデータベースに直接保存することはできません。そのため、SimpleDateFormat の解析メソッドを使用して日付時刻に変換する必要があります。解析メソッドを使用すると、日付を取得できます。時間値。その後、その値を TimeStamp 型の列に格納できます。

値を取得するには、dateTime として値を取得し、java.text パッケージの simpledatformat クラスの format メソッドを使用して値をフォーマットします。

于 2012-07-13T02:25:57.410 に答える
0

日付をデータベースに直接保存するには、JAVA6 に TimeStamp クラス ( java.sql.Timestamp ) を導入します。

まず、エンティティを次のように置き換えます

クラスEmp{文字列ID、TimeStamp joinDate}

setdate()、setHour()... メソッドを使用して希望の形式で joinDate を設定し、SQL TIMESTAMP によって直接受け入れられる時刻を指定できるようになりました。

于 2013-07-02T11:21:15.690 に答える