Ich versuche die Aufgabe 2 zu lösen, kann mich auch zum Server connecten, aber es kommt immer wieder der sleber Fehler, und zwar springt das Programm immer in die Exception "Fehler bei Datenbankabfrage." aber weiss nicht wieso. In der main()-Methode habe ich das versucht:
———-
AccessDB accessDB = new AccessDB();
accessDB.connect();
accessDB.askDB("SELECT Firstname, Lastname, Job, WorkDept, Salary FROM db2inst1.Employee");
accessDB.closeStatement();
———-
Aber klappt nicht, und weiss nicht wieso, habe ich mich etwa vertippt? Wenn ja, wo, oder ist der Fehler iergendwo anders?
———-
public ResultSet askDB (String query){
statement = null;
ResultSet resultSet = null;
try {
statement = con.createStatement();
} catch (SQLException e) {
System.out.print("Statement konnte nicht erzeugt werden.");
}
try {
resultSet = statement.executeQuery(query);
} catch (SQLException e1) {
System.out.print("Fehler bei Datenbankabfrage.");
}
return resultSet;
}
———-
} catch (SQLException e1) {
System.out.print("Fehler bei Datenbankabfrage.");
}
Mach da doch mal etwas aussagekräftigeres hin.
Z.B. e1.printStackTrace();
Dann wird statt "Fehler bei Datenbankabfrage" auch angezeigt,
wo der Fehler aufgetreten ist und was genau schief gelaufen
ist.
Edit: Und poste dann nochmal die Ausgabe! [img]
http://www.fb18.de/gfx/22.gif[/img]
Habe das versucht:
accessDB.askDB("SELECT Firstname FROM db2inst1.Employee");
Dann kam folgender Fehler:
com.ibm.db2.jcc.a.SqlException: DB2 SQL error: SQLCODE: -206, SQLSTATE: 42703, SQLERRMC: FIRSTNAME
at com.ibm.db2.jcc.a.co.e(co.java:1361)
at com.ibm.db2.jcc.a.co.a(co.java:984)
at com.ibm.db2.jcc.b.bd.g(bd.java:121)
at com.ibm.db2.jcc.b.bd.a(bd.java:42)
at com.ibm.db2.jcc.b.r.a(r.java:31)
at com.ibm.db2.jcc.b.bp.g(bp.java:103)
at com.ibm.db2.jcc.a.co.g(co.java:968)
at com.ibm.db2.jcc.a.co.a(co.java:1599)
at com.ibm.db2.jcc.a.co.a(co.java:301)
at com.ibm.db2.jcc.a.co.executeQuery(co.java:285)
at AccessDB.askDB(AccessDB.java:48)
at AccessDB.main(AccessDB.java:87)
Was könnte falsch gelaufen sein? Ich rätsel noch immer…
Fehler gefunden:
Der Datenbankersteller hat einen Fehler gemacht, kann man auch in der ddl.txt nachlesen, anstatt Firstname steht da Firstnme
Ok, der Code klappt sonst gut.
na siehste ^^
wozu is man informatiker? improvisieren is angesagt [img]
http://www.fb18.de/gfx/22.gif[/img]
die eigene software so bauen, dass sie mit der fehlerhaften software der anderen (und zwar nur mit dieser) loift [img]
http://www.fb18.de/gfx/24.gif[/img]
Bei der folgenden Abfrage
accessDB.askDB("SELECT Workdept, AVG(Salary) FROM db2inst1.EmployeeWHERE AVG(Salary)>30000 GROUP BY Workdept");
KOmmt immer eine sqlException auf mit
com.ibm.db2.jcc.a.SqlException: DB2 SQL error: SQLCODE: -104, SQLSTATE: 42601, SQLERRMC: >30000;yeeWHERE AVG(Salary);<space>
Verstehe aber nicht ganz was das zu bedeuten hat
eine nette Seite mit allen Fehlermeldungen ist folgende
http://publib.boulder.ibm.com/infocenter/db2v7luw/index.jsp?topic=/com.ibm.db2v7.doc/db2m0/sql0300.htmman muss natürlich trotzdem noch raten, was genau gemeint ist,
hier wahrscheinlich kein Leerzeichen zwischen Tabellenname und WHERE?
Bei der folgenden Abfrage
accessDB.askDB("SELECT Workdept, AVG(Salary) FROM db2inst1.EmployeeWHERE AVG(Salary)>30000 GROUP BY Workdept");
KOmmt immer eine sqlException auf mit
com.ibm.db2.jcc.a.SqlException: DB2 SQL error: SQLCODE: -104, SQLSTATE: 42601, SQLERRMC: >30000;yeeWHERE AVG(Salary);<space>
Verstehe aber nicht ganz was das zu bedeuten hat
Ich glaube, man kann in einem WHERE-Statement keine Funktionen wie AVG benutzen.
EDIT: so damit hier keine lösungen stehen mal anders:
The HAVING clause can refer to aggregate functions, which the WHERE clause cannot:
mysql> SELECT user, MAX(salary) FROM users GROUP BY user HAVING MAX(salary)>10;
(aus dem MySQL Manual
http://dev.mysql.com/doc/mysql/en/SELECT.html )
Wie war das noch gleich mit Lösungen posten?
also SQL-Syntax kann ja wohl nicht die Aufgabe sein oder? ;)
kommt mir aber aso vor, das macht mir zumindest die meisten probleme