2017-07-28 1 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); 

Hier Date1 und Date2 ist der Jdatechooser, vom Benutzer genommen.Daten zwischen den Daten abrufen

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

Sie haben einen Fehler in Ihrer SQL-Syntax; Überprüfen Sie das Handbuch, das Ihrer MariaDB-Serverversion entspricht, für die richtige Syntax in der Nähe von 'Date> = Jun 12, 2017 BETWEEN Datum <= 14 Jun. 2017' in Zeile 1 –

+0

https://www.w3schools.com/sql/ sql_dates.asp –

Antwort

0

Verwenden Sie STR_TO_DATE-Funktion;

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

Ich bin nicht sicher, dass Sie auch einfache Anführungszeichen vor und nach Daten hinzufügen sollten. –

+0

wie man Zeichenfolge in Datum konvertiert –

0

Versuchen Sie, das Datum 'date1' anzugeben.

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

läuft, aber nicht Daten abrufen –

+0

@AsadMughal - zeigen Sie uns den Wert von 'query'. –

0

Sie können versuchen, "BETWEEN" zu verwenden.

Exempel:

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

Ich hoffe, ich konnte Ihnen helfen.

+0

Sie haben einen Fehler in Ihrer SQL-Syntax. Überprüfen Sie das Handbuch, das Ihrer MariaDB-Server-Version für die richtige Syntax in der Nähe von '12, 2017 UND 14. Juni 2017 'in Zeile 1 entspricht –

+0

Ich glaube, Sie vergessen das '' 'rund um das Datum in SQL-Abfrage. – SCHREDDO

+1

Der SQL-Befehl 'BETWEEN' ist" geschlossen ", dh sowohl der Anfang als auch das Ende sind inklusive. Dies ist * nicht * was am besten für die Arbeit mit Datumsangaben verwendet wird. Verwenden Sie bei der Arbeit mit Datum und Uhrzeit den Ansatz "Halboffen", wobei der Anfang * inklusive * ist, während die Endung * exklusiv * ist. Das Mittagessen beginnt also um 12 Uhr mittags und läuft bis zum ersten Moment um 13 Uhr, aber nicht inklusive. Eine Woche beginnt am Montag und läuft bis zum nächsten Montag. –

0

Um dieses Problem zu lösen, die Sie brauchen, um Schritte zu erreichen:

  • Proper Datumsformat von JAVA-Snippet
  • Apostrophe hinzufügen Daten in SQL-Skript Einwickeln

Ich bin nicht sicher, wie Sie formatieren eine Datumsvariable de JAVA, um den ANSI-Datumsstandard 'YYYYMMDD' zurückzugeben.

Das SQL-Skript muss folgendermaßen aussehen:

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

Die 'SimpleDateFormat'-Klasse ist Teil der problematischen alten Legacy-Date-Time-Klassen, die nun durch die java.time-Klassen ersetzt werden. –

+0

@BasilBourque danke für die Klarstellung, ich werde es entfernen – Horaciux

1

Datum-Zeit-Typ

für Datum-Zeit-Werte, Typen Einsatz Datum Zeitdaten Ihrer Spalt und Verwendung Datum Zeitklassen in Java zu definieren. Der Job Ihres JDBC-Treibers besteht darin, zwischen diesen Typen zu vermitteln.

Sie versuchen, Zeichenfolgen anstelle von Datum-Uhrzeit-Objekten zu übergeben.

Halboffen Logik

In Datum Zeitarbeit, verwenden Halboffen Ansatz, bei dem der Anfang inklusive ist, während das Ende exklusiv ist. Das Mittagessen beginnt also um 12 Uhr mittags und läuft bis zum ersten Moment um 13 Uhr, aber nicht inklusive. Eine Woche beginnt am Montag und läuft bis zum nächsten Montag.

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

Der SQL-Befehl BETWEEN ist "geschlossen", dh sowohl der Anfang als auch das Ende sind inklusive; nicht gut für Datum-Uhrzeit-Arbeit.

Parse Strings bisher Zeit

Sie benötigen eine Benutzereingabe in Datum Zeitobjekte zu verwandeln. Möglicherweise möchten Sie einen String-Typen nach Benutzer analysieren. Oder Sie möchten ein Datum-Zeit-Widget verwenden. In Ihrem Fall wird das Parsen von Strings offensichtlich benötigt. Durchsuchen Sie den Stack-Überlauf nach , um Hunderte von vorhandenen Fragen und Antworten zu finden.

SQL & JDBC

Die Instant Klasse in Java stellt einen Moment auf der Timeline in UTC.Entspricht der älteren Klasse java.util.Date, aber mit einer feineren Auflösung von Nanosekunden statt Millisekunden.

Wenden Sie eine Zeitzone ZoneId an, um ein Objekt ZonedDateTime zu erhalten. Entspricht der Legacy-Klasse GregorianCalendar.

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

Und ...

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

Tipps

beachten Namenskonventionen. In Java beginnen Variablen mit einem Kleinbuchstaben.

Vermeiden Sie die Benennung von Spalten in der Datenbank mit reservierten Wörtern. Der einfachste Weg, um alle reservierten Wörter vollständig zu vermeiden, besteht darin, an alle Namen aller Ihrer Datenbankobjekte einen abschließenden Unterstrich anzuhängen. Der SQL-Standard verspricht ausdrücklich, niemals einen abschließenden Unterstrich zu verwenden.