iLoha Javaisten,
ich knabber schon seit ein paar Tagen an einem seltsamen Problem wo selbst Kollegen von mir keine Idee mehr haben.
Folgendes, ich bekomme ein ResultSet (rsQuelle) von einer anderen Methode übergeben und möchte nun per rsQuelle.getString("Name1") die Daten der aktuellen Zeile auslesen. Soweit so gut. Der erste Zugriff ist problemlos (Erhalte den Wert), der direkt folgende (auch wenn er identisch ist) verursacht eine SQL Exception "No data found". Es gibt keine next() Anweisung dazwischen, sondern er soll einfach auf das gleiche Feld des ResultSets zugreifen ...
Folgender Codeschnipsel befindet sich in einem Try/Catch Block vereint.
Es ist immer der 2. Zugriff, sei er auch System.out. oder pstmt., der die Exception verursacht.....
Notiz:Code:pstmt = sqlCon.prepareStatement("Select Abfrage und Platzhalter fürs PreparedStatement"); System.out.println(rsQuelle.getRow()); // Ausgabe ist ok System.out.println(rsQuelle.getString("NAME1")); // Ausgabe ist ok pstmt.setString(1, ""+rsQuelle.getString("NAME1")+""); // Exception
Die Daten kommen aus einer AccessDB die per JDBC/ODBC in einer Untermethode zur Verarbeitung in ein ResultSet gepackt werden.
Das daraus erhaltene Set ist auch in Ordnung...
Ideen und Hinweise sind herzlich willkommen.
now this rfc ist declared as open.
M.
Ergebnis 1 bis 10 von 10
ResultSet Abfrage, 'No data found'
Diskussion über ResultSet Abfrage, 'No data found' in Java der Kategorie Programmierung; iLoha Javaisten, ich knabber schon seit ein paar Tagen an einem seltsamen Problem wo selbst Kollegen von mir keine Idee ...
- 18.08.2005, 14:54 #1
ResultSet Abfrage, 'No data found'
Geändert von Merlin_Level_E (18.08.2005 um 14:55 Uhr) Grund: Rechtschreibung lag nur im Verborgenem dunkel der gleißend hellen Nacht
"2+2 sind 4, manchmal aber auch 3,5,6 oder gleichzeitig alles zusammen. Es zählt nicht was du selber für wahr erachtest, es gilt nur was dir die Partei zu glauben gibt." George Orwell, 1984
[Wichtig] Weder Boardbetreiber noch Beitragsersteller haften für verlinkte Inhalte ! [/Wichtig]
- 18.08.2005, 15:01 #2
<Nummer5>Brauche Input</Nummer5>

Das ist ein bisschen wenig, was du uns verrätst, die interessanten Stellen hast du weggelassen.
- wie ist der genaue SQL-String des PreparedStatements?
- wie ist der genaue SQL-String der Query, aus der du die Daten ziehst?
- wie ist der Stacktrace der SQLException?
- 18.08.2005, 15:14 #3
iLoha Perdi,
<Nummer5>mehr input</Nummer5>
na dem Wunsch komme ich doch gerne nach
folgende Exception gibts dann dazuCode:try{ pstmt = sqlCon.prepareStatement("SELECT ADRESSE FROM KHKAdressen WHERE NAME1 = ? AND LIEFERSTRASSE = ? AND LIEFERORT = ? "); // Zum Test der Fehler System.out.println(rsQuelle.getRow()); // geht System.out.println(rsQuelle.getString("NAME1")); // geht auch // Eigentliche Stelle des Nutzens :) pstmt.setString(1, ""+rsQuelle.getString("NAME1")+""); // *bumm* würde hier aber auch bei einem System.out. passieren pstmt.setString(2, ""+rsQuelle.getString("STRASSE")+""); pstmt.setString(3, ""+rsQuelle.getString("ORT")+""); rsSQL_ADR = pstmt.executeQuery(); }catch(SQLException emeOn) { System.out.println("Fehler beim Feststellen der Adressen in KHKAdressen."); return false; }
Notiz:Code:RETCODE = 100 ERROR - No data found java.sql.SQLException: No data found
Beim Aufbau der ersten SQL Verbindung erhalte ich Warnings die mich auf Sprachänderung hinweisen.
"WARNING - Generating SQLWarning...
SQLWarning: reason([Microsoft][ODBC SQL Server Driver][SQL Server]Datenbankkontext auf 'XXX_Testdatenbank' geändert.) SQLstate(01000) vendor code(5701)
SQLWarning: reason([Microsoft][ODBC SQL Server Driver][SQL Server]Spracheneinstellung auf Deutsch geändert.) SQLstate(01000) vendor code(5703)"
Die Transaktion wird nur zu Beginn dahingehend manipuliert, dass AutoCommit false ist.
Thanks a lot,
m.Geändert von Merlin_Level_E (18.08.2005 um 15:17 Uhr)
"2+2 sind 4, manchmal aber auch 3,5,6 oder gleichzeitig alles zusammen. Es zählt nicht was du selber für wahr erachtest, es gilt nur was dir die Partei zu glauben gibt." George Orwell, 1984
[Wichtig] Weder Boardbetreiber noch Beitragsersteller haften für verlinkte Inhalte ! [/Wichtig]
- 18.08.2005, 16:29 #4
um das ganze noch ein wenig zu ergänzen:
Verbindung zur Access DB per ODBC
Erzeugung des rsQuelle ResultSetsCode:public static Connection getConnection (String sQuelle) throws SQLException, ClassNotFoundException { System.out.println("\n------ Verbindung Access | Log-Anfang ------"); DriverManager.setLogWriter( new PrintWriter(System.out) ); Class.forName( "sun.jdbc.odbc.JdbcOdbcDriver" ); Connection conAccess = DriverManager.getConnection( "jdbc:odbc:"+sQuelle+"","","" ); System.out.println("------ Verbindung Access | Log-Ende ------"); return (conAccess); }
db_access ist ein Modul um die ODBC/JDBC Optionen auszuhandeln und eine Verbindung zum Access zu initiieren.Code:try { Connection conA = db_access.getConnection(sQuelle); Statement stmt = conA.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_UPDATABLE); String query = "SELECT * FROM "+sTab+""; ResultSet rs = stmt.executeQuery( query ); return(rs); } catch (SQLException e)
sTab ist ein String der den Namen der Tabelle beinhaltet (kommt per Parameter).
log der SQL Verbindung
Code:Connection.setAutoCommit (false) Setting connection option (SQLSetConnectOption), hDbc=260450048, fOption=102, vParam=0 Fetching (SQLFetchScroll), hStmt=260448032 *Connection.prepareStatement (SELECT ADRESSE FROM KHKAdressen WHERE NAME1 = ? AND LIEFERSTRASSE = ? AND LIEFERORT = ? ) Allocating Statement Handle (SQLAllocStmt), hDbc=260450048 hStmt=260448888 Setting statement option (SQLSetStmtOption), hStmt=260448888, fOption=6, vParam=0 Setting statement option (SQLSetStmtOption), hStmt=260448888, fOption=7, vParam=1 Preparing (SQLPrepare), hStmt=260448888, szSqlStr=SELECT ADRESSE FROM KHKAdressen WHERE NAME1 = ? AND LIEFERSTRASSE = ? AND LIEFERORT = ? Number of parameter markers (SQLNumParams), hStmt=260448888 value=3 Registering Statement sun.jdbc.odbc.JdbcOdbcPreparedStatement@8bdcd2 1 *ResultSet.getMetaData Number of result columns (SQLNumResultCols), hStmt=260448032 value=32 *ResultSetMetaData.getColumnName (1) Column attributes (SQLColAttributes), hStmt=260448032, icol=1, type=1 value (String)=ID Number of result columns (SQLNumResultCols), hStmt=260448032 value=32 *ResultSetMetaData.getColumnName (2) Column attributes (SQLColAttributes), hStmt=260448032, icol=2, type=1 value (String)=SCHNELLSUCHE Number of result columns (SQLNumResultCols), hStmt=260448032 value=32 *ResultSetMetaData.getColumnName (3) Column attributes (SQLColAttributes), hStmt=260448032, icol=3, type=1 value (String)=NAME1 Column attributes (SQLColAttributes), hStmt=260448032, icol=3, type=2 value (int)=12 Column attributes (SQLColAttributes), hStmt=260448032, icol=3, type=3 value (int)=255 Get string data (SQLGetData), hStmt=260448032, column=3, maxLen=256 BEISPIEL FIRMA Dresden GmbH BEISPIEL FIRMA Dresden GmbH Fetching (SQLFetchScroll), hStmt=260448032 Get string data (SQLGetData), hStmt=260448032, column=3, maxLen=256 BEISPIEL FIRMA Dresden GmbH Binding IN string parameter (SQLBindParameter), hStmt=260448888, ipar=1, SQLtype=1, precision=8000, scale=0, rgbValue=[B@1f78ef1 Get string data (SQLGetData), hStmt=260448032, column=3, maxLen=256 RETCODE = 100 ERROR - No data found
Geändert von Merlin_Level_E (18.08.2005 um 16:32 Uhr)
"2+2 sind 4, manchmal aber auch 3,5,6 oder gleichzeitig alles zusammen. Es zählt nicht was du selber für wahr erachtest, es gilt nur was dir die Partei zu glauben gibt." George Orwell, 1984
[Wichtig] Weder Boardbetreiber noch Beitragsersteller haften für verlinkte Inhalte ! [/Wichtig]
- 19.08.2005, 09:05 #5
Alles ein bisschen sehr unübersichtlich aber ein Gedanke kommt mir:
Haste du nach dem ResultSet rs = stmt.executeQuery( query ); irgendwo ein rs.next() aufgerufen?
Das muss auch vor dem ersten Datensatz gemacht werden.
- 19.08.2005, 09:46 #6
Moin Perdi,
Japp, das ganze Prozedre läuft in einer "while (rsQuelle.next())" Schleife ab.
Was einfach so verwirrend ist, ist dass er schon korrekt auf das ResultSet zugegriffen hat nun aber beim 2. Versuch mit identischen Angaben kollabiert.
a little bit ratlos ..."2+2 sind 4, manchmal aber auch 3,5,6 oder gleichzeitig alles zusammen. Es zählt nicht was du selber für wahr erachtest, es gilt nur was dir die Partei zu glauben gibt." George Orwell, 1984
[Wichtig] Weder Boardbetreiber noch Beitragsersteller haften für verlinkte Inhalte ! [/Wichtig]
- 19.08.2005, 12:14 #7
Du hast noch immer keinen Stacktrace gepostet - her damit!
- 19.08.2005, 12:33 #8
Hi,
manchmal muss man sich halt mit einem vorgegebenen Verhalten zufriedenstellen.
Ich weiß nicht wo dein Problem liegt. Entweder du nutzt einen "richtigen" JDBC Treiber oder lebst mit der SUN Implementierung die anscheinend einen zweifachen Zugriff nicht vorsieht.
Warum sollte man auch zweimal auslesen?
Speichere das doch einfach in eine Variable und gut ist.
Selbst Sun sagt, dass man die eingebaute JDBC ODBC Bridge nur im Notfall nutzen soll. http://java.sun.com/j2se/1.5.0/docs/...ridge.doc.html
Gruß JarazGeändert von Jaraz (19.08.2005 um 12:43 Uhr)
- 19.08.2005, 16:18 #9
iLoha Javaisten,
Jaraz, danke für die Infos. Hätte nicht gedacht dass Sun der Bride nur Notfall-Qualitäten zuschreibt. Schade, wäre meiner Faulheit sonst recht zuträglich gewesen
perdi, Dank für schnelle Erläuterung und hier erbetenes,
Stacktrace:
Code:java.sql.SQLException: No data found at sun.jdbc.odbc.JdbcOdbc.standardError(JdbcOdbc.java:7060) at sun.jdbc.odbc.JdbcOdbc.SQLGetDataString(JdbcOdbc.java:3862) at sun.jdbc.odbc.JdbcOdbcResultSet.getDataString(JdbcOdbcResultSet.java:5561) at sun.jdbc.odbc.JdbcOdbcResultSet.getString(JdbcOdbcResultSet.java:338) at sun.jdbc.odbc.JdbcOdbcResultSet.getString(JdbcOdbcResultSet.java:395) at app_comparison.sortNpaste(app_comparison.java:101) at app_comparison.main(app_comparison.java:49)
"2+2 sind 4, manchmal aber auch 3,5,6 oder gleichzeitig alles zusammen. Es zählt nicht was du selber für wahr erachtest, es gilt nur was dir die Partei zu glauben gibt." George Orwell, 1984
[Wichtig] Weder Boardbetreiber noch Beitragsersteller haften für verlinkte Inhalte ! [/Wichtig]
- 19.08.2005, 17:09 #10
Nun ja, JDBC wird generell über Interfaces realisiert.
Zitat von Merlin_Level_E
Und das ResultSet Interface sagt nun mal nicht, das mehrfaches aufrufen der Funktion immer wieder den Wert zurückgibt.
Auch wenn die meisten anderen JDBC Driver Hersteller das so implementiert haben.
Gruß Jaraz
Aktive Benutzer
Aktive Benutzer
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
Ähnliche Themen
-
LevelOrder Traversierung von Bäumen
Von Jaipur im Forum C und C++Antworten: 20Letzter Beitrag: 15.12.2010, 19:47 -
mod_php 4.3.8 installieren/updaten
Von kills im Forum Linux + UnixAntworten: 41Letzter Beitrag: 07.09.2004, 09:07 -
[SQL] Abfrage in Abfrage ?
Von 2daBeat im Forum DatenbankenAntworten: 4Letzter Beitrag: 31.10.2003, 10:18 -
Probleme mit Modem oder was?
Von JayN im Forum Windows BetriebssystemeAntworten: 20Letzter Beitrag: 17.02.2003, 20:48 -
Datenbanl abfrage via JAVA und SQL
Von startup im Forum JavaAntworten: 20Letzter Beitrag: 29.04.2002, 11:31


LinkBack URL
About LinkBacks
Zitieren