Auf Thema antworten

Hallo,


ich habe folgendes Problem:


ich möchte diese Abfrage im Java-Quelltext ausführen:

SELECT DISTINCT Hersteller, SUM(Rating) FROM Artikel

WHERE Hersteller LIKE '%'

GROUP BY Hersteller

ORDER BY SUM(Rating) DESC


Mache ich diese Abfrage über HeidiSQL kommt keine Fehlermeldung. Die richtigen Daten werden ausgegeben.

In meinem Java-Code erscheint allerdings folgende Exception:

[code=Java]com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: 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 'BY SUM(Rating) DESC' at line 1

    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)

    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)

    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)

    at java.lang.reflect.Constructor.newInstance(Constructor.java:525)

    at com.mysql.jdbc.Util.handleNewInstance(Util.java:408)

    at com.mysql.jdbc.Util.getInstance(Util.java:383)

    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1062)

    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4208)

    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4140)

    at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2597)

    at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2758)

    at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2820)

    at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2769)

    at com.mysql.jdbc.StatementImpl.executeQuery(StatementImpl.java:1569)

    at mhd.programm2.controller.DBConnect.getHerstellernamen(DBConnect.java:81)

    at mhd.programm2.controller.MHDProgramm2.main(MHDProgramm2.java:25)

[/code]



Hier meine Methode:


[code=Java]public ArrayList<String> getHerstellernamen(String hersteller, int n) {

        String query;

        query = "SELECT DISTINCT Hersteller, SUM(RATING) "

                + "FROM Artikel "

                + "WHERE Hersteller LIKE '" + hersteller + "%' "

                + "GROUP BY Hersteller"

                + "ORDER BY SUM(Rating) DESC;";

       

        //Wünschenswert: zweite SQL-Abfrage mit FETCH FIRST n ROWS ONLY

       

        try {

            stmt = con.createStatement();

            rs = stmt.executeQuery(query);

        } catch (SQLException ex) {

            ex.printStackTrace();

            System.err.println("Fehler bei der Datenbankabfrage!");

        }


        ArrayList<String> herstellernamen;

        herstellernamen = new ArrayList<>();

        try {

            while (rs.next()) {

                herstellernamen.add(rs.getString("Hersteller"));

            }

            return herstellernamen;

        } catch (SQLException ex) {

            ex.printStackTrace();

            System.err.println("Keine Hersteller!");

            return null;

        }

    }[/code]


Andere Abfragen funktionieren einwandfrei (außer ich baue eine FETCH-Funktion mit ein, dann kommt auch eine Fehlermeldung), das heißt die Datenbankverbindung steht und funktioniert.


Ich habe leider keine Ahnung, was der Fehler sein könnte, da ich bisher noch sehr wenig mit Datenbankprogrammierung gearbeitet habe.


Vielleicht kennt ihr ja den Fehler. Vielen Dank, schon mal.


Vielleicht noch zur Info: Die Methode soll während der Eingabe eines Herstellernamens Suchvorschläge aus der Datenbank ausgeben.



Oben