2017-07-28 2 views
0
String Date1 = (((JTextField)jDateChooser1.getDateEditor().getUiComponent()).getText()); 
String Date2 = (((JTextField)jDateChooser2.getDateEditor().getUiComponent()).getText()); 

String query="SELECT * FROM work_hours WHERE ID ="+A+" AND Date >= "+Date1+" AND Date <= "+Date2+" "; 
ResultSet rs = db.Select(query); 

ここで、Date1とDate2は、ユーザーから取得したJdatechooserです。日付間のデータの取得

Error: 
You have an error in your SQL syntax; check the manual that 
corresponds to your MariaDB server version for the right syntax to use 
near 'Date >= Jun 12, 2017 Date <= Jun 14, 2017' at line 1 
+0

SQL構文に誤りがあります。 'Date> = 2017年6月12日BETWEEN Date <= June 14、2017' on line 1 –

+0

https://www.w3schools.com/sql/の近くで使用する正しい構文については、MariaDBサーバーのバージョンに対応するマニュアルを参照してください。 sql_dates.asp –

答えて

0

STR_TO_DATE関数を使用します。

String query="SELECT * FROM work_hours WHERE ID ="+A+" AND Date >= STR_TO_DATE("+Date1+") AND Date <= STR_TO_DATE("+Date2+") "; 
+0

日付の前後に単一引用符を追加する必要があるかどうかはわかりません。 –

+0

文字列を日付に変換する方法 –

0

日付 'date1'を入力してください。

String query="SELECT * FROM work_hours WHERE ID ="+A+" 
AND Date >= '"+Date1+"' AND Date <= '"+Date2+"' "; 
+0

が実行されますが、データは取得されません。 –

+0

@AsadMughal - 'query'の値を表示します。 –

0

「BETWEEN」を使用できます。

Exempel:

SELECT * FROM table_name WHERE date BETWEEN '2017-07-01 07:07:07' AND '2017-07-31 07:07:07';

私は、私はあなたを助けることができました願っています。あなたがステップに達成する必要があり、この問題を解決するために

+0

SQL構文にエラーがあります。あなたのMariaDBサーバのバージョンに対応するマニュアルをチェックして、正しい構文が第1行の'12、2017 AND June 14、2017 'の近くで使用するようにしてください。 –

+0

SQLクエリの日付の前後に '' 'を忘れてしまったと思います。 – SCHREDDO

+1

SQLコマンド「BETWEEN」は、開始と終了の両方を含む「閉じた」状態です。これは、日時制作に最適なものではありません。日時制作では、ハーフ・オープン・アプローチを使用します。開始は* inclusive *であり、エンディングは* exclusive *です。だから、昼食は正午に始まり、午後1時の最初の瞬間まで実行されますが、含まれません。 1週間は月曜日から始まり、次の月曜日まで実行されますが、含まれます。 –

0

:JAVAから

  • 適切な日付形式、私はどのようにわからないSQLスクリプトで

を日付を包む単一引用符を追加

  • スニペットあなたは日付の変数をフォーマットします。JAVAはANSI日付基準 'YYYYMMDD'を返します。

    SQLスクリプトは次のようになります。

    String query="SELECT * FROM work_hours WHERE ID ="+A+" AND Date >= '"+Date1+"' AND Date <= '"+Date2+"' "; 
    ResultSet rs = db.Select(query); 
    
  • +0

    'SimpleDateFormat'クラスは、厄介な古いレガシーの日時クラスの一部であり、現在はjava.timeクラスに置き換えられています。 –

    +0

    @BasilBourque清算してくれてありがとう、私はそれを削除します – Horaciux

    1

    日付・時刻型

    日時値、使用日時データ型あなたの列を定義し、Javaで日時のクラスを使用するために。 JDBCドライバの仕事は、これらのタイプを仲介することです。

    日時オブジェクトではなく文字列を渡そうとしています。

    日時仕事でハーフオープンロジック

    は、結末が排他的である一方、初めは包括的であるハーフオープンなアプローチを使用しています。だから、昼食は正午に始まり、午後1時の最初の瞬間まで実行されますが、含まれません。 1週間は月曜日から始まり、次の月曜日まで実行されますが、含まれます。

    SELECT * FROM tbl_ 
    WHERE when_ >= ? -- Pass start moment. Inclusive. 
    AND when_ < ? -- Pass stop moment. Exclusive. 
    ; 
    

    SQLコマンドBETWEENは「開始」と「終了」の両方を含む「閉じた」ものです。日時制作には適していません。

    解析文字列、日付時刻に

    あなたは、日付時刻オブジェクトにユーザー入力を変換する必要があります。ユーザーは文字列型を解析することができます。あるいは、日時ウィジェットを使用することもできます。あなたの場合は、文字列の解析が必要です。 DateTimeFormatterのスタックオーバーフローを検索すると、何百もの既存の質問と回答が見つかります。

    SQL & JDBC

    JavaでInstantクラスは、UTCでタイムライン上の瞬間を表しています。従来のjava.util.Dateクラスに相当しますが、ミリ秒よりも細かいナノ秒の分解能を備えています。

    タイムゾーンZoneIdを適用してZonedDateTimeオブジェクトを取得します。レガシークラスGregorianCalendarと同等です。

    ZonedDateTime zdt = ZonedDateTime.parse(input , …) ; 
    myPreparedStatement.setObject(… , zdt.toInstant()) ; 
    

    そして...

    Instant instant = myResultSet.getObject(… , Instant.class) ; 
    ZonedDateTime zdt = instant.atZone(ZoneId.of("America/Montreal")) ; 
    

    ヒント

    は、命名規則を守ってください。 Javaでは、変数は小文字で始まります。

    予約語のデータベースに列の名前を付けないでください。すべての予約語を完全に避ける最も簡単な方法は、すべてのデータベースオブジェクトのすべての名前に末尾のアンダースコアを追加することです。 SQL標準では、末尾にアンダースコアを使用しないことが明示されています。

    関連する問題