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 ?
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 ?
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 ?
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.
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) ...
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 ?
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 ?
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
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.
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
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); } }
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.
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
Empfohlene Beiträge
Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren
Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können
Benutzerkonto erstellen
Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!
Neues Benutzerkonto erstellenAnmelden
Du hast bereits ein Benutzerkonto? Melde Dich hier an.
Jetzt anmelden