Veröffentlicht 1. August 200619 j 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 ?
1. August 200619 j 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 ?
1. August 200619 j Autor Wurde der Import von ResultSet ausgetauscht ? Siehe letzte Frage Wie ist der FQCN bzw. gibt es eine spezielle Oracle-Java-API-Doku ?
1. August 200619 j 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.
1. August 200619 j Autor 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) ...
1. August 200619 j 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 ?
1. August 200619 j Autor 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 ?
1. August 200619 j 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
1. August 200619 j Schon mal deine Query in einem anderen Interface zur Datenbank ausprobiert? Vielleicht hast du da ja einen Mysql-Dialekt drin, den Oracle nicht mag.
2. August 200619 j Autor 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
2. August 200619 j Autor 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); } }
2. August 200619 j 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.
2. August 200619 j Autor Returns: a ResultSet object that contains the data produced by the given query; never null Das hatte ich überlesen
Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.