TDM Geschrieben 1. August 2006 Geschrieben 1. August 2006 Hallo, Ich habe mit einer Findfunktion für eine Datenbank Probleme. In MySQL funktioniert diese aber. In folgendem Abschnitt ist der Fehler: Statement stm = null; try { stm = DbConnection.getConnection().createStatement(); System.out.println(stm == null); ResultSet rs = stm.executeQuery(query); while (rs.next()) { HafelObject ho = createHafelObject(clazz); if (ho != null) { Map<String, Object> map = new HashMap<String, Object>(); String[] cols = ho.getColumns(); for (int i = 0; i < cols.length; i++) { map.put(cols[i], rs.getObject(cols[i])); System.out.println(cols[i] + ":" + rs.getObject(cols[i])); } ho.setValues(map); c.add(ho); } } query ist ein String und clazz ist eine Class-Instanz. Problem an der Sache ist folgendes: In der Zeile ResultSet rs = stm.executeQuery(query); wird rs mit MySQL belegt. Bei Oracle ist dies aber null. Bisher habe ich den Treiber ojdbc14.jar im Projekt (früher den MySQL-connector) Brauch ich irgendeine andere Klasse / Funktion um das mit Oracle zu realisieren ? Zitieren
Pinhead Geschrieben 1. August 2006 Geschrieben 1. August 2006 In der Zeile ResultSet rs = stm.executeQuery(query); wird rs mit MySQL belegt. Bei Oracle ist dies aber null. Wurde der Import von ResultSet ausgetauscht ? Zitieren
TDM Geschrieben 1. August 2006 Autor Geschrieben 1. August 2006 Wurde der Import von ResultSet ausgetauscht ? Siehe letzte Frage Wie ist der FQCN bzw. gibt es eine spezielle Oracle-Java-API-Doku ? Zitieren
Pinhead Geschrieben 1. August 2006 Geschrieben 1. August 2006 Ups sorry hab ich übersehen. Jetzt muss ich auch noch gestehen das die FQCN komplett gleich sind Welche Oracle Version wird denn eingesetzt Bei uns ist es Oracle 8 und ich habe für den Connect eine classes12.zip eingebunden. Zitieren
TDM Geschrieben 1. August 2006 Autor Geschrieben 1. August 2006 Oracle 10g Ich habs jetzt schon mit OracleResultSet probiert - geht aber auch nicht. In den Metadaten sind zumindest die SpaltenNamen drin - also kann es daran auch nicht liegen oder ?! Irgendwie will der die Daten aber nicht reinschreiben java.sql.SQLException: ResultSet.next wurde nicht aufgerufen at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:125) at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:162) at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:227) at oracle.jdbc.driver.OracleResultSetImpl.getObject(OracleResultSetImpl.java:833) at oracle.jdbc.driver.OracleResultSet.getObject(OracleResultSet.java:1547) ... Zitieren
Pinhead Geschrieben 1. August 2006 Geschrieben 1. August 2006 java.sql.SQLException: ResultSet.next wurde nicht aufgerufen Dieser Satz deutet ja daraufhin das er nicht in die while Schleife reinläuft. Allerdings kann ich in dem Code nicht erkennen warum er das nicht tun sollte. Das laden mit dem Class.forName("oracle.jdbc.driver.OracleDriver"); funktioniert ? Zitieren
TDM Geschrieben 1. August 2006 Autor Geschrieben 1. August 2006 ja, je nach Treibertyp wird auch die SQL anweisung zusammengeschnipselt ich hab das schon bis auf die Funktion ausgeschlossen (hoff ich) Wenn der Treiber nicht funktionieren würde, hätte ich ja keine Spaltennamen oder ? Zitieren
Pinhead Geschrieben 1. August 2006 Geschrieben 1. August 2006 Wenn der Treiber nicht funktionieren würde, hätte ich ja keine Spaltennamen oder ? Da bin ich mir nämlich nicht so sicher. Man kann ja auch Alias namen in SQL vergeben beim Select und diese kann ich dann auch im ResultSet ansprechen. Daher könnte es auch sein das die Spaltennamen aus deiner Query genommen wurden Zitieren
etreu Geschrieben 1. August 2006 Geschrieben 1. August 2006 Schon mal deine Query in einem anderen Interface zur Datenbank ausprobiert? Vielleicht hast du da ja einen Mysql-Dialekt drin, den Oracle nicht mag. Zitieren
TDM Geschrieben 2. August 2006 Autor Geschrieben 2. August 2006 Daher könnte es auch sein das die Spaltennamen aus deiner Query genommen wurden Bei Select * From tab z.B. hab ich keine Spaltennamen im Query :/ Schon mal deine Query in einem anderen Interface zur Datenbank ausprobiert? Ich wünschte ich würde eins finden, was geht Vielleicht hast du da ja einen Mysql-Dialekt drin, den Oracle nicht mag. Je nach Treibertyp wird ein anderer Dialekt benutzt. Das Query hab ich mir ausgebenlassen und manuell geprüft - das ist OK Zitieren
TDM Geschrieben 2. August 2006 Autor Geschrieben 2. August 2006 Ich weiß zwar nicht was ich gemacht hab, aber jetzt gehts... Statement stmt = null; ResultSet rs = null; try { stmt = DbConnection.getConnection().createStatement(); rs = stmt.executeQuery(query); while (rs.next()) { HafelObject ho = createHafelObject(clazz); if (ho != null) { Map<String, Object> map = new HashMap<String, Object>(); String[] cols = ho.getColumns(); for (int i = 0; i < cols.length; i++) { map.put(cols[i], rs.getObject(cols[i])); } ho.setValues(map); c.add(ho); } } Zitieren
Pinhead Geschrieben 2. August 2006 Geschrieben 2. August 2006 Ich weiß zwar nicht was ich gemacht hab, aber jetzt gehts... Naja das erste was mir auffällt ist das das ResultSet mit null vorbelegt wird. Zitieren
TDM Geschrieben 2. August 2006 Autor Geschrieben 2. August 2006 Returns: a ResultSet object that contains the data produced by the given query; never null Das hatte ich überlesen Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.