Fehler bei mySQL Query

jothemac

Mitglied
Hallo,

wenn ich folgende mysql query ausführe bekomme ich folgenden Fehler:
Java:
SELECT OPENCHANGEDAYBEFOREPERCENT FROM APP.FB WHERE DAY=2 LIMIT 0,10
java.sql.SQLSyntaxErrorException: Syntaxfehler: Encountered "LIMIT" at line 1, column 59.

So wie es aussieht liegt es am LIMIT befehl, ich habe im inet nachgeschaut da wird aber gesagt das die syntax so aussehen soll.

joni8a
 

Evil-Devil

Top Contributor
Versucht du einen FB SQL Querie an Facebook abzusetzen? Ich bin mir nicht sicher, aber unterstützen die überhaupt Limit?

Sonst rein von der Sytax her hast du da schon gültiges MySQL. Es empfiehlt sich allerdings nur Limit 10 zu sagen und fürs Paging mit alternativen Methoden zu arbeiten.
 

jothemac

Mitglied
Hallo,

ne ich versuche nicht an FaceBook zu senden :D
Wenn ich nur mit limit arbeite bekomme ich den selben Fehler:
Java:
SELECT OPENCHANGEDAYBEFOREPERCENT FROM APP.FB LIMIT 10
java.sql.SQLSyntaxErrorException: Syntaxfehler: Encountered "10" at line 1, column 53.
 

gp

Aktives Mitglied
Und du bist sicher, dass es eine MySql-Datenbank ist? Wie sieht dein Java denn genau aus? Grundsätzlich gehört ein ";" ans Ende jeder Anfrage. Geht es denn ohne Limit? Nur mal, um das Problem einzukreisen :)
 

jothemac

Mitglied
Ohne Limit geht es, der code sieht so aus:(Ja bin mir sicher das es MYSQL ist ;) )
Java:
public void createNewQuery() throws SQLException
    {
        numberOfDays = Integer.parseInt(numberOfEntriesTf.getText());
        String query = "SELECT "+askedForVariable+" FROM APP."+stock.StockName.toUpperCase();
        
        if(day > 1)
        {
            query = query+ " WHERE DAY="+day;
        }
        if(numberOfDays > 0)
        {
            query = query + " LIMIT "+numberOfDays;
        }
        
        ResultSet rs = stock.askForData(query);
        while(rs.next())
        {
            System.out.println(rs.getString(1));
        }
    }


Hier ist der code der die anfrage sendet:
Java:
public ResultSet askForData(String valueQuery)
    {
        PreparedStatement ps = null;
        
        
        
        
        System.out.println("ASKED QUERY:"+valueQuery);
        
        ResultSet rs = null;
        try
        {
            ps = dbHelper.conn.prepareStatement(valueQuery,
                    ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_READ_ONLY);
            rs = ps.executeQuery();
        }
        catch(SQLException ex)
        {
            ex.printStackTrace();
        }
        
        return rs;
    }
 

gp

Aktives Mitglied
Ich könnte mir vorstellen, dass sich LIMIT nicht mit ResultSet.TYPE_SCROLL_SENSITIVE verträgt - versuch doch mal prepareStatement nur mit dem ersten Parameter.

Ich verstehe auch den Sinn der Kombination nicht: du willst READ-ONLY lesen aber ein veränderbares Ergebnis? TYPE_SCROLL_INSENSITIVE würde ich eher verstehen. Ich selbst verwende so was gar nicht, daher sind das alles mehr Vermutungen, mehr dazu hier.
 

Bernd Hohmann

Top Contributor
Ich befürchte, dass Dein Problem im TYPE_SCROLL_SENSITIVE | CONCUR_READ_ONLY liegt weil es der Tabellentyp dahinter in MySQL nicht mit LIMIT kann.

Ist das MyISAM oder InnoDB? Du brauchst vermutlich InnoDB weil stabile Cursoren nur mit transaktionssicheren Engines gehen.

Bernd
 

Bernd Hohmann

Top Contributor
Ich verstehe auch den Sinn der Kombination nicht: du willst READ-ONLY lesen aber ein veränderbares Ergebnis? TYPE_SCROLL_INSENSITIVE würde ich eher verstehen. Ich selbst verwende so was gar nicht, daher sind das alles mehr Vermutungen, mehr dazu hier.

Ich hatte viel mit IBM DB2 gemacht, die DB konnte ordentliche Transaktionen und hatte Cursors. Wenn ich mein Restwissen zusammenkratze passiert da folgendes:

1) Erst wird die Query durchgeführt und über das Ergebnis ein Cursor aufgemacht (also so ne Art ArrayList) den man vorwärts und rückwärts durchscrollen kann.

2) Man kann an jeder beliebigen Stelle die im Cursor enthaltenen Datensätze ändern

3) In der DB werden die Änderungen erst bei Transaktionsende für andere User sichtbar

4) Andere User können bis zum Transaktionsende in der Zwischenzeit keine Datensätze ändern, die im Cursor enthalten sind

Was dann wirklich passiert hängt stark von der DB ab - manche können weniger, manche mehr, manchmal ist es unmöglich die diversen Cursor-Stability-Modes korrekt auf die Vorgaben von JDBC umzusetzen (so war es jedenfalls mal).

Bernd
 

Lumaraf

Bekanntes Mitglied
Bist du dir da auch ganz sicher das du MySQL verwendest? Normalerweise müßte die Meldung bei einem Syntaxfehler so in der Art aussehen: [c]You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1[/c]

Poste am besten mal wie du dich mit der Datenbank verbindest. Speziell Die JDBC-Url die an DriverManager.getConnection() übergeben wird wäre besonders hilfreich.
 

jothemac

Mitglied
Jaa ich noch mal, FETCH FIRST gibt mir immer x anzahl row´s wieder. Aber ich möchte das nur die ersten x rows durschaut werden. Heisst wenn ich 100 einträge habe, dann möchte ich nur die ersten 10 anschauen. Jetzt habe ich etwas geschaut und das TOP query gefunden, aber anscheinend funktioniert das query nicht: http://www.java-forum.org/datenbankprogrammierung/119643-select-top-statement-geht.html
Meine frage kann man mein ziel dennoch irgendwie erreichen, mit einem Query?
 
S

SlaterB

Gast
nochmal langsam, was macht FETCH und was möchtest du?

> Heisst wenn ich 100 einträge habe, dann möchte ich nur die ersten 10 anschauen.

klingt genau nach den Beispielen im Link, FETCH FIRST 3 ROWS ONLY liefert John, Anne und Sue von wer weiß wie vielen Personen

es ist mir zumindest nicht klar was du anderes haben willst, vielleicht hilft ein Beispiel,
eine Tabelle mit 10 statt 100 Daten, ein FETCH mit 3, was wird geliefert mit genau welcher Query, was willst du stattdessen haben?
 

jothemac

Mitglied
Beispiel Datenbank(APP.BD):
Tag | Sonnig | Temperatur
_______________________
Montag | JA | 20
_______________________
Dienstag | NEIN | 15
_______________________
Mittwoch | NEIN | 13
_______________________
Donnerstag | JA | 22
_______________________
Freitag | JA | 25
_______________________
Montag | NEIN | 21

Beispiel Query mit FETCH:
SELECT Temperatur FROM APP.BD WHERE DAY=Montag FETCH FIRST 2 ROWS ONLY

Query liefert mir dann zurück:
20 und 21(Für die Temperatur der beiden Montage)

Ich möchte aber, dass das Programm bzw. das query sich nur auf die ersten beiden Einträge bezieht. Heisst er soll sich nur die ersten beiden einträge anschauen.
Das Query sollte mir also nur 20 zurück geben. Also nur für den einen Montag, denn unter den ersten beiden einträgen befindet sich nur ein Montag.
 
S

SlaterB

Gast
ohne Sortierung könnten theoretisch zwei beliebige Werte ausgewählt werden,
das als grundsätzlicher Hinweis, in deinem Beispiel vielleicht aus Einfachheit nicht dabei

der Logik nach ist die normale Lösung glaube ich Verschachtelung:
Code:
SELECT Temperatur FROM (SELECT * FROM APP.BD FETCH FIRST 2 ROWS ONLY) WHERE DAY=Montag
allerdings habe ich leicht in Erinnerung, dass es fragwürdig ist, ob das funktioniert,
mit ROWNUM in Oracle verschiebt sich die Einschränkung trotz Verschachtelung nach außen und ähnlich komisches,

aber einfach mal hoffen:
wenn dir dieser Weg praktikabel erscheint, funktionierts auch?
 

jothemac

Mitglied
QUERY:SELECT OPENCHANGEDAYBEFORENUMBER FROM(SELECT * FROM APP.FB FETCH FIRST 2 ROWS ONLY) WHERE DAY = 2
SCHWERWIEGEND: null
java.sql.SQLSyntaxErrorException: Syntaxfehler: Encountered "WHERE" at line 1, column 85.

Immer noch ein fehler, daran muss Oracle mal arbeiten, sollte nicht so schwer sein
 
S

SlaterB

Gast
helfen 1-2 Leerzeichen im Schmelz-Block "FROM(SELECT"?

ein grundsätzlicher Test, ob SubQuerys im FROM erlaubt sind, ist natürlich angebracht,
eine andere Schreibweise wäre in Richtung
[sql]
SELECT Temperatur FROM APP.BD
WHERE DAY=Montag
AND id in (SELECT id FROM APP.BD FETCH FIRST 2 ROWS ONLY)
[/sql]
aber vielleicht ist einfach FETCH im Inneren nicht erlaubt
 

jothemac

Mitglied
Ich habe noch etwas weiter geforscht und das hier gefunden:
Java:
SELECT * FROM (
    SELECT ROW_NUMBER() OVER() AS ROWNUM,
           TABLE1.* FROM TABLE1) AS T
WHERE ROWNUM <= 5
Auf dieser Seite:JavaDB(Derby)?LIMIT????ROWNUM - argius note
Ich habe so etwas auch auf der Oracle seite gefunden, nur nicht mehr wieder gefunden um den link zu posten...
Der Code liefert so die ersten 5 einträge wieder, nur weiss ich noch nicht wo ich WHERE DAY = MONTAG unterbringen soll...
 

jothemac

Mitglied
SO muss das query aussehen:
SQL:
"SELECT OPENCHANGEDAYBEFORENUMBER FROM ( SELECT ROW_NUMBER() OVER() AS rownum, APP.FB.* FROM APP.FB) AS tmp WHERE DAY = 2 AND ROWNUM < 2";

So funktionierts, mein gott war das ne schwere geburt. Danke für all die Hilfe!
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
H Fehler bei getConnection zu MySQL Datenbank Datenbankprogrammierung 18
P MySQL JPA / MySQL - Fehler bei type=innoDB Datenbankprogrammierung 8
M MySQL-Syntax-Fehler Datenbankprogrammierung 1
B MySQL Fehler: Cannot open connection mit Tomcat7, Hibernate und MySQL Datenbankprogrammierung 4
Crashbreaker MySQL MySQL - Hibernate gibt Fehler aus Datenbankprogrammierung 25
H Fehler bei null-Datum in MySQL-DB Datenbankprogrammierung 2
M Update mysql Fehler ?? Datenbankprogrammierung 4
T Fehler bei Verbindungsaufbau zu MySql DB Datenbankprogrammierung 4
B MySql DELETE Anweisung gibt Fehler zurück Datenbankprogrammierung 7
D mySQL emullierte PreparedStatements haben Fehler unter Last Datenbankprogrammierung 3
E Fehler bei String-Insert in MySQL-DB Datenbankprogrammierung 8
T Cast-Fehler: Spring Data exists.... boolean??? Datenbankprogrammierung 1
T compiler fehler: should be mapped with insert="false" update="false" Datenbankprogrammierung 1
O Create Table per JDBC Fehler: ORA-00922 Datenbankprogrammierung 4
S MySQL Hibernate: Fehler bei Verwendung von 2 unterschiedlichen Enumration Datenbankprogrammierung 3
S @OneToMany @JoinTable failed to lazily initialize a collection Fehler Datenbankprogrammierung 2
C Oracle Fehler beim list.add() Datenbankprogrammierung 5
das_leon MySQL Fehler bei der Zeitzone Datenbankprogrammierung 7
M SQL-Statement SQL mit Java, Update Fehler Datenbankprogrammierung 1
L MySQL Bekomme einen Fehler beim ResultSet Datenbankprogrammierung 12
DaCrazyJavaExpert Derby/JavaDB Unfindbarer Fehler im Datenbank-Code Datenbankprogrammierung 87
L SQL Fehler (Table/View does not exist) Datenbankprogrammierung 17
Thallius MySQL Wo ist der Fehler in dem Query? Datenbankprogrammierung 2
B JPA->fehler beim Insert in die Datenbank Datenbankprogrammierung 3
V Fehler beim Generierung Fehler beim Generierung java.lang.ArrayIndexOutOfBoundsException: 0 Datenbankprogrammierung 12
H HSQLDB Beim öffnen folgender Fehler: ... java.lang.NullPointerException Datenbankprogrammierung 1
Z Finde den Fehler: Daten aus einer Access-Datenbank lesen Datenbankprogrammierung 12
W Jackcess Fehler Datenbankprogrammierung 1
I Fehler bei Ausgabe der Daten aus der DB Datenbankprogrammierung 3
J SQL-Statement Meine insert befehle funktionieren nicht und ich weiß nicht wo der fehler liegt Datenbankprogrammierung 5
serjoscha MySQL Eine Instanz von eigenem DBWrapper -> Fehler durch mehrfachbenutzung möglich? Datenbankprogrammierung 2
M Wo ist mein Fehler ? o: Datenbankprogrammierung 4
C H2 Syntax fehler beim erstellen einer Tabelle Datenbankprogrammierung 4
T JDBC Fehler Datenbankprogrammierung 2
Neumi5694 Java + MS Access + 64 Bit = Fehler -1073740777 Datenbankprogrammierung 2
T Fehler beim ausgeben von Tabellen Inhalt Datenbankprogrammierung 9
R Fehler 2601 trotz SQL-UPDATE ? Datenbankprogrammierung 2
B JDBC Connection Fehler Datenbankprogrammierung 8
D Oracle PLSQL Block Fehler Datenbankprogrammierung 11
P SQL-Statement Bei meinem Statement ist ein Fehler? Datenbankprogrammierung 2
S Fehler mit JdbcRowSet Datenbankprogrammierung 2
A Oracle Unbekannter Fehler bei insert Befehl Datenbankprogrammierung 3
M PL/SQL Fehler "Kein Wert zurückgegeben" Datenbankprogrammierung 4
S 2 Tabellen zu einer zusammenführen, INSERT INTO Fehler Datenbankprogrammierung 5
M Access Update Statement Fehler update -> unmöglich? Datenbankprogrammierung 3
I Derby/JavaDB Update Fehler Datenbankprogrammierung 4
N Update Prepared Statement Fehler bei Argumenten Datenbankprogrammierung 3
D JDBC Fehler beim laden der nativen Bibliothek db2jcct2 Datenbankprogrammierung 9
N Oracle Fehler Ungültiges Zeichen Datenbankprogrammierung 2
jgh Zeichensatz-Fehler Datenbankprogrammierung 10
L Derby/JavaDB Fehler beim Erstellen einer Tabelle Datenbankprogrammierung 2
F hsqldb Fehler - unknown source Datenbankprogrammierung 11
E Fehler- Komme nicht auf Datenbank Datenbankprogrammierung 13
trash ResultSet Syntax Fehler Datenbankprogrammierung 11
trash JDBC Einbinden Fehler Datenbankprogrammierung 9
B Fehler in Stored Procedure Datenbankprogrammierung 7
E [ACCESS ODBC] INSERT INTO Fehler Datenbankprogrammierung 4
E Nach Server wechsel Datenbank fehler ?!? Datenbankprogrammierung 3
B SQL - Ich kann die Fehler nicht finden Datenbankprogrammierung 3
K DB2 Insert mit Subselect Fehler Datenbankprogrammierung 2
T Fehler im SQL ... Datenbankprogrammierung 8
J Fehler bei Hibernate Configuration Datenbankprogrammierung 9
N group by fehler Datenbankprogrammierung 4
P SQL Fehler helft mir bitte Datenbankprogrammierung 12
F Fehler bei Stored Function Datenbankprogrammierung 2
S Fehler beim Auslesen von Daten Datenbankprogrammierung 6
C Wo ist der Fehler? Datenbankprogrammierung 5
H Fehler mit ". Microsoft Access Driver" Datenbankprogrammierung 12
K Fehler bei Rückgabewerten Datenbankprogrammierung 3
M Statemend Fehler Datenbankprogrammierung 11
H Beim insert bekomme ich den Fehler missing select keyword Datenbankprogrammierung 2
E Seltsamer Fehler Datenbankprogrammierung 10
S Fehler bei DB Verbindung Access Datenbankprogrammierung 6
A JDBC-Fehler "Objekt bereits geschlossen" Datenbankprogrammierung 4
O SQL-Query bringt Fehler Datenbankprogrammierung 4
A Fehler beim Starten des Servers für H2 Database Datenbankprogrammierung 13
A Fehler in der HSQLDB Datenbankprogrammierung 6
B fehler bei select befehl Datenbankprogrammierung 5
G SQL fehler -> woran liegt das? Datenbankprogrammierung 3
M Odbc und Fehler Datenbankprogrammierung 44
M Fehler bei der Verbindung zu einer MSSQL/Express Datenbank! Datenbankprogrammierung 17
F Fehler in Suns FilteredRowSet Implementierung? Datenbankprogrammierung 11
R Fehler in der Eingabe? Datenbankprogrammierung 3
J Fehler bei Oracle-Datenbankverbindung Datenbankprogrammierung 2
E JDBC Oracle Fehler, zugriff auf datenbank (Cluster) Datenbankprogrammierung 5
P Fehler: result-set zeigt auf null, aber warum Datenbankprogrammierung 4
G Fehler in der select-Abfrage Datenbankprogrammierung 3
G Fehler beim Verbinden Datenbankprogrammierung 4
D Primary-Key -> Fehler: "Unique constraint violation& Datenbankprogrammierung 12
E Fehler in der SQL-Anweisung Datenbankprogrammierung 11
A Fehler in der Datenbankklasse Datenbankprogrammierung 14
M insert befehl funzt nicht!wo ist der fehler? Datenbankprogrammierung 5
N Fehler beim matchen von Strings via Query Datenbankprogrammierung 2
L komischer Fehler von ResultSet. Datenbankprogrammierung 2
R Fehler in Datenbankanbindung Servlet -> Access Datenbankprogrammierung 5
G Wo ist hier der Fehler (createStatement) Datenbankprogrammierung 2
M executeBatch() - Inserts trotz Fehler weitermachen Datenbankprogrammierung 5
W Fehler bei Insert Anweisung obwohl getestet Datenbankprogrammierung 3
J Fehler beim PreparedStatement Datenbankprogrammierung 2
H Java/Access - Fehler bei der Parameterübergbe Datenbankprogrammierung 4

Ähnliche Java Themen


Oben