ResultSet ist leer! Warum?

Status
Nicht offen für weitere Antworten.

spoona

Mitglied
Hallo,

ich habe gerade eine kleine Datenbankanbindung geschrieben.
Das ganze soll aus einer JSP-Datei heraus erfolgen.
Eine Verbindung zur Datenbank kann wohl hergestellt werden, aber wenn ich ein SQL-Statement abschicke
bekomme ich immer nur eine leere Menge zurück.
Ich werde hier bald verrückt :). Es stehen definitiv Daten in der DB und daher darf das Set auch nicht leer sein.
Vielleicht könnt ihr mir helfen: den folgende Code habe ich verwendet:

htmlCODE....
<%
String sDbDrv = "com.microsoft.sqlserver.jdbc.SQLServerDriver";
String sDbUrl = "jdbc:sqlserver://localhost:1433; DatabaseName=PIM_DB";
String sUsr = "chris";
String sPwd = "******";
Connection cn = null;
Class.forName( sDbDrv );
cn = DriverManager.getConnection( sDbUrl, sUsr, sPwd );
%>
htmlCODE...
<%
stmt=cn.createStatement();
query="Select Test1 From Main";
rs=stmt.executeQuery(query);%>

<option>
<%=rs.getString(1) %>
</option>


Der Zugriff soll auf den "MSSQL Server 2005 Express" erfolgen.
Beim Ausführen des Codes taucht folgende Fehlermeldung auf:

javax.servlet.ServletException: Das ResultSet verfügt über keine aktuelle Zeile

Vielen Dank für Eure Hilfe
Gruß Chris
 

foobar

Top Contributor
Code:
<option>
<%= if (rs.next()){ rs.getString(1)} %>
</option>

P.S. Es gibt kaum etwas schlimmeres als SQL in JSQP einzubetten.
 

spoona

Mitglied
Hallo,

also zunächst was meinst du damit :SQL in JSP einzubetten ist schlecht??

Ich habe jetzt weiteren Code hinzugefügt:

Code:
    ...     rs.first();%>
            
            <option>
            <%= if (rs.next()) {rs.getString(1);}%>
            </option>

so folgende Fehlermeldung bekomme ich nun.

javax.servlet.ServletException: Der angeforderte Vorgang wird für nur vorwärts gerichtete ResultSets nicht unterstützt.


Hilfe!!!!!
 

spoona

Mitglied
Naja weil AlArenal gesagt hat, dass ich den Zeiger im Set auf das erste Element setzen soll
Hmmm, verstehe das alles nicht. Warum geht das nicht?

Hat es mit der rechte Verwaltung auf dem SQL Server zu tun? Ich bekomme doch eine Verbindung über den Usernamen, also sollte ich doch auch Daten auslesen können?

Hmm
 

AlArenal

Top Contributor
spoona hat gesagt.:
Naja weil AlArenal gesagt hat, dass ich den Zeiger im Set auf das erste Element setzen soll

rs.next() erldigt das aber bereits. Nur hattest du in deinem ersten Code direkt nach der Ausführung des Statements versucht aufs ResultSet zuzugreifen.
 

spoona

Mitglied
ok ja klar hast du natürlich recht.


folgenden Code habe ich jetzt:
Code:
            ...
            stmt=cn.createStatement();
            query="Select Test1 From Main";
            rs=stmt.executeQuery(query);%>

                         
            <option>
              <% while (rs.next())              <----- kein      <%=
              {rs.getString(1);}
              %>
            </option>

so startet zumindet meine Seite, aber leider ist das Dropdown-Menu nicht gefüllt mit dem Wert aus der Datenbank.

wenn ich den JSP Tag durch <%= ersetze, bekomme ich folgende Fehlermeldung:
illegal start of expression
while (rs.next())
^

wie kann ich dem Dropdown-Menu denn nun ein Wert zuweisen?
Hatte die Idee die While Bedingung vor OptionTag in ein weiteres Tag zu packen, leider komme ich da mit den Klammern und den Tags durcheinander.
 

foobar

Top Contributor
also zunächst was meinst du damit :SQL in JSP einzubetten ist schlecht??
Wenn du schon JSP verwendest, dann pack kapsel deinen DB-Code z.b. durch DAOs und greif über Customtags darauf zu. Es gibt auch ganz nette vorefertigte CustomtagLibraries die dir z.b. For-Schleifen und sowas liefern mit denen du über Beans iterieren kannst. Guck dir z.b. mal Struts an, das macht viel mehr Sinn, als JSPs zu vergewaltigen.

http://java.sun.com/blueprints/corej2eepatterns/Patterns/DataAccessObject.html
http://struts.apache.org/
 

spoona

Mitglied
jo, dachte aber dass das nicht so entscheidend ist.
Habe es wie folgt geändert:

Code:
            <select name="Wahl">
            <option>
            <%= while (rs.next()) { rs.getString(1) ; } %>
            </option>
            </select>

naja bekomme immer noch die Fehlermeldung:
C:\Dokumente und Einstellungen\krille.HOME\.netbeans\5.0\jakarta-tomcat-5.5.9_base\work\Catalina\localhost\WebApplication1\org\apache\jsp\Temp_005fDB_jsp.java:108: illegal start of expression
out.print( while (rs.next()) {rs.getString(1);});
^

An error occurred at line: 66 in the jsp file: /Temp_DB.jsp
Generated servlet error:
C:\Dokumente und Einstellungen\krille.HOME\.netbeans\5.0\jakarta-tomcat-5.5.9_base\work\Catalina\localhost\WebApplication1\org\apache\jsp\Temp_005fDB_jsp.java:108: ')' expected
out.print( while (rs.next()) {rs.getString(1);});



übersehe ich irgendwo ein Semikolon oder eine Klammer??
Verdammt!!!
^
 

DP

Top Contributor
an deiner stelle würde ich java erstmal bei seite legen und mir zuerst html aneignen. das was du da produziert ist schrott.
 

spoona

Mitglied
foobar hat gesagt.:
Jepp, du hast die runde Klammer der While-Schleife nicht geschlossen.
Sorry, aber wo denn das? Ich kann es nicht sehen, ich bin blind:)


DP hat gesagt.:
an deiner stelle würde ich java erstmal bei seite legen und mir zuerst html aneignen. das was du da produziert ist schrott.
Also wenn man schon kritisiert, dann bitte richtig! Es sollte dann darauf hingewiesen werden, was deiner Meinung nach Schrott ist!. Ich habe gerade bewusst nicht auf die genaue Syntax geachtet, da es zunächst sekundär ist.
Es geht mir zunächst nur darum ein Dropdown Menu mit den Daten aus der Datenbank zu füllen.
Das ist das Hauptproblem!

Sollte dir das besser gefallen:
Code:
<form action="">


<select size="1" name="Auswahl" width="250">
<option> <%= while (rs.next()) { rs.getString(1) ; } %></option>
</select></p>
</form>

Gruß Chris
 

AlArenal

Top Contributor
spoona hat gesagt.:
Ich habe gerade bewusst nicht auf die genaue Syntax geachtet, da es zunächst sekundär ist.
Es geht mir zunächst nur darum ein Dropdown Menu mit den Daten aus der Datenbank zu füllen.
Das ist das Hauptproblem!

Willlst du das Ding nun füllen, oder ist es sekundär? Wenn du es füllen willst, gehts so jedenfalls nicht, weil der produzierte HTML-Code nunmal falsch sein wird, unabhängig davon ob und wieviele Daten du ausgelesen bekommst. Nichts anderes wollte DP dir sagen.
 

spoona

Mitglied
AlArenal hat gesagt.:
Willlst du das Ding nun füllen, oder ist es sekundär? Wenn du es füllen willst, gehts so jedenfalls nicht, weil der produzierte HTML-Code nunmal falsch sein wird, unabhängig davon ob und wieviele Daten du ausgelesen bekommst. Nichts anderes wollte DP dir sagen.
Das kann ja schön und gut sein, dass er mir das sagen wollte, aber dann soll er es auch richtig stellen.
Ich verstehe einfach nicht wie man sagen, das ist scheiße das ist Schrott und keine Stellung bezieht. Das hilft keinem weiter.

Außerdem wenn ich die Option Tags mit manuellen Text fülle, erscheint es auch so auf der Webseite, wie ich es haben will.
Also was soll nicht funktionieren?? Verstehe ich nicht? Anstatt Text soll jetzt nur noch ein Wert aus der Datenbank kommen. Also lieg das Problem nicht am HTML, oder wie?
 

foobar

Top Contributor
Code:
<option> <%= while (rs.next()) { rs.getString(1) ; } %></option>
Guck dir mal diese Zeile genau an, dann wirst du sehen daß der Inhalt der ersten Option durch den Inhalt der ersten Spalte eines Resultsets ersetzt wird. Ist es das was du willst oder willst du nicht vielmehr alle Datensätze des Resultsets jeweils als Option formatieren?
Daher auch mein Rat, lern erstmal richtig Html/Xhtml CSS und JavaScript, dann hast du später weniger Probleme.
 

AlArenal

Top Contributor
spoona hat gesagt.:
Außerdem wenn ich die Option Tags mit manuellen Text fülle, erscheint es auch so auf der Webseite, wie ich es haben will

So, wie es in denem letzten Code steht, funzt es aber nur für eine einzige Option, da du die Option-Tags nicht für jede Ausgabe aus dem Result-Set setzt.

Aussehen sollte es so:
Code:
<select>
<option value ="volvo">Volvo</option>
<option value ="saab">Saab</option>
<option value ="opel" selected="selected">Opel</option>
<option value ="audi">Audi</option>
</select>

Bei dir sähe es so aus:
Code:
<select>
<option>Volvo</option>Saab Opel Audi</select>

..zumindest wenn ich das nach kurzer Nacht und den Handwerkern im Haus gerade richtig überblicke.. ;)
 

AlArenal

Top Contributor
Genau genommen gibt das Ding glaub ich sogar gar nichts aus..

Ach herrje.. und jetzt auch noch ne Sommergrippe... :(
 

spoona

Mitglied
Ja genau da habt ihr beide recht.
Aber das will ich ja sagen, dass ich zunächst einfach nur froh wäre, wenn diese dumme Datenbank mir endlich mal einen Wert zurück gibt.
Es ist mir natürlich klar, dass ich mit dem bisherigen Quellcode nur einen Wert im Dropdown besitze.
Das ist aber zunächst völlig egal. Der Punkt ist ja, dass nur ein leeres ResultSet aus der DB kommt.
Ich kann auch eine Textfeld nehmen und versuchen es mit Inhalt zu füllen--> geht auch nicht.

Der folgende Code funktioniert nicht und ich weiß nicht warum?
Der Fehler muss am Gleich liegen, hinter dem Java Tag. Was ist daran falsch ? Ich finde auch den Klammerfehler nicht.
Code:
<select name="Wahl"> 
            <option> 
            <%= while (rs.next()) { rs.getString(1) ; } %> 
            </option> 
            </select>

Dann mal gute Besserung :)
 

AlArenal

Top Contributor
Ok, nachdem wir das geklärt haben, kommen wir mal zu des Pudels Kern. Ausgehend von deinem eingangs gepostetem SQL-Code, wird dein ResultSet nur eine Spalte haben. mit rs.getString(1) grteifst du aber auf die zweite zu - die es nicht gibt.

Bumm!

Weniger fehleranfällig, da übersichtlicher und variabler ist es auch, nicht über den Spaltenindex zuzugreifen, sondern über den Spaltennamen.
 

foobar

Top Contributor
Code:
Ausgehend von deinem eingangs gepostetem SQL-Code, wird dein ResultSet nur eine Spalte haben. mit rs.getString(1) grteifst du aber auf die zweite zu - die es nicht gibt.
Nein, hier wird bei Eins angefangen zu zählen, das ist schon korrekt.

etString

String getString(int columnIndex)
throws SQLException

Retrieves the value of the designated column in the current row of this ResultSet object as a String in the Java programming language.

Parameters:
columnIndex - the first column is 1, the second is 2, ...
Returns:
the column value; if the value is SQL NULL, the value returned is null
Throws:
SQLException - if a database access error occurs
 

spoona

Mitglied
AlArenal hat gesagt.:
Ok, nachdem wir das geklärt haben, kommen wir mal zu des Pudels Kern. Ausgehend von deinem eingangs gepostetem SQL-Code, wird dein ResultSet nur eine Spalte haben. mit rs.getString(1) grteifst du aber auf die zweite zu - die es nicht gibt.
Auf die Zweite? Kann gerade nicht folgen sorry, der Index beginnt doch bei Eins oder nicht.
Ok dann werde ich lieber über den Spaltennamen arbeiten ,das ist auch schöner.
Kann leider gerade nichts ausprobieren, werde erst heute abend dazu kommen.
Dann werde ich mich aber bestimmt wieder melden.

Vielen Dank aber erstmal
 

foobar

Top Contributor
@spoona Kannst du denn von einem Konsoleprogramm aus auf die DB zugreifen? Hast du keine IDE mit Syntaxhighlighting für JSP, die dich bei der Fehlersuche unterstützt?
Guck dir mal Eclipse + Lomboz-Plugin oder Eclipse + MyEclipse-Plugin.
 

AlArenal

Top Contributor
@foobar:

Dann habe ich nichts gesagt und behaupte das Gegenteil ;)
JDBC ist schon ne Weile her bei mir und ich muss schiffen wie blöde und die scheiß Handwerker werden nicht fertig :(
 

spoona

Mitglied
@foobar Also ich verwende gerade Netbeans zur Entwicklung. Muss ich mal schauen, wie das mit Syntaxhighlighting für JSP aussieht. Du meinst also ob ich überhaupt ein Ergebnis aus der Datenbank bekomme, wenn ich ein Select Statement über einen z.B. SQL Manager abschicke?
Ja da bekomme ich ein Ergebnis zurück.
 

Murray

Top Contributor
Bin zwar nicht gerade ein JSP-Experte, aber ist es nicht so, dass das hier gewählte Konstrukt der JSP-Expression
Code:
<%= ... %>
überhaupt nicht leisten kann, was hier gebraucht wird? Bei so einer Expression wird doch zunächst der gesamte Ausdruck evaluiert und das Ergebnis dann in den HTML-Code eingebettet. Und was ist denn der Return-Wert einer While-Schleife?

Vermutlich braucht man hier eher ein JSP-Scriptlet:
Code:
<%
  while (rs.next()) {
%>
    <option> <%= rs.getString(1)  %></option>
<%
  }
%>
 

spoona

Mitglied
Jo das könnte gut aussehen.
Das kann der Fehler sein.
Werde es heute abend gleich mal ausprobieren.

Danke
 
G

Guest

Gast
Hallo, es hat endich funktioniert.

Ich habe jetzt ein Dropdown-Menu mit 3 Werten aus der Datenbank

der folgende code hat zum gewünschten Ergebnis geführt:
Code:
...
            <% while (rs.next()){%>
            <option>
            <%= rs.getString("1")%>
            </option>
            <%}%>

Vielen Dank für Eure Hilfe
Gruß Spoona
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
I Sonderbehandlung wenn ResultSet leer ist Datenbankprogrammierung 9
A Warum ist mein ResultSet leer? Datenbankprogrammierung 5
K ResultSet prüfen,ob es leer ist oder ob vorhanden Datenbankprogrammierung 2
S ResultSet als Parameter an andere Klasse übergeben Datenbankprogrammierung 3
Z ResultSet ist null warum? Datenbankprogrammierung 12
R HSQLDB ResultSet update aktualisiert DB, aber nicht das ResultSet Datenbankprogrammierung 2
Dimax Erstellen ResultSet und Statement Datenbankprogrammierung 30
C PostgreSQL ResultSet.TYPE_SCROLL_SENSITIVE setzen Datenbankprogrammierung 2
L MySQL Bekomme einen Fehler beim ResultSet Datenbankprogrammierung 12
L Zugriff auf ein Resultset Datenbankprogrammierung 7
L MySQL ResultSet vollständig auslesen Datenbankprogrammierung 20
D Resultset schließen ?? Datenbankprogrammierung 5
T Oracle Resultset to Array sehr langsam. Datenbankprogrammierung 8
B Probleme mit java.sql.SQLException: ResultSet closed Datenbankprogrammierung 21
J SQLite ResultSet closed -- Wiederholende DB-Abfragen Datenbankprogrammierung 6
Z MySQL Probleme mit resultSet executQuery Datenbankprogrammierung 3
L ResultSet Datenbankprogrammierung 1
J wie mit resultset.next() über Datensätze iterieren? Datenbankprogrammierung 15
R MySQL Umgang mit ResultSet/Fremdschlüssel ausgeben Datenbankprogrammierung 2
D MySQL ResultSet als Stream weiter geben Datenbankprogrammierung 9
M ResultSet Cachen Datenbankprogrammierung 3
R ResultSet mit "Untertabellen" Datenbankprogrammierung 4
N SQL-Statement Auslesen des Resultset wird immer langsamer Datenbankprogrammierung 6
R Resultset.last() Problem Datenbankprogrammierung 12
PaulG Leeres ResultSet initialisieren Datenbankprogrammierung 6
J Frage zu ResultSet Datenbankprogrammierung 3
J SQL ResultSet Previous Datenbankprogrammierung 10
S MySQL ResultSet in ein Array übertragen Datenbankprogrammierung 7
H PostgreSQL Objekte aus ResultSet Datenbankprogrammierung 5
H ResultSet is closed tritt bei JSF aber nicht bei einer Java-Applikation auf Datenbankprogrammierung 10
O Oracle Resultset greift auf Spaltenüberschriften zu Datenbankprogrammierung 2
Kenan89 Wieso klappt das ResultSet nicht? Datenbankprogrammierung 3
C ResultSet enthält nicht alle Daten Datenbankprogrammierung 4
F Derby/JavaDB Resultset in JTablemodel Datenbankprogrammierung 2
F Oracle ResultSet zu einer HashMap<Integer, String[]> Datenbankprogrammierung 6
B SQLite ResultSet is TYPE_FORWARD_ONLY Datenbankprogrammierung 5
T Exception ResultSet Datenbankprogrammierung 7
0 ResultSet in JTable Datenbankprogrammierung 14
S [SQL] ResultSet Datenbankprogrammierung 4
R ResultSet Datenbankprogrammierung 4
I Problem mit ResultSet Datenbankprogrammierung 2
I SQL_Abfrage-Ergebnis (ResultSet) in String[] speichern Datenbankprogrammierung 29
B ResultSet wirft komische NullPointerException. Datenbankprogrammierung 3
R Detached ResultSet Datenbankprogrammierung 3
F generelle Vorgehensweise ResultSet Datenbankprogrammierung 5
S ResultSet Datenbankprogrammierung 2
A MySQL ResultSet.updateBytes schlägt fehl Datenbankprogrammierung 2
F ResultSet kann Datenbank nicht update, warum? Datenbankprogrammierung 3
T ResultSet befehl für leere Spalte nicht lesen Datenbankprogrammierung 4
S ResultSet einer Datenbankabfrage - Nullpointer Exception Datenbankprogrammierung 13
A PostgreSQL anfängerfrage: resultset zeilenweise auslesen Datenbankprogrammierung 2
T MySQL ResultSet zurückgeben nachdem Connection geschlossen wurde? Datenbankprogrammierung 3
K Keine ResultSet bei if in StoredProcedure Datenbankprogrammierung 16
D ResultSet gibt nichts aus. Datenbankprogrammierung 3
trash ResultSet Syntax Fehler Datenbankprogrammierung 11
ARadauer JDBC ResultSet schließen? Datenbankprogrammierung 4
M Oracle Problem mit Resultset Datenbankprogrammierung 11
J jdbc ResultSet types Datenbankprogrammierung 5
R Frage zu PreparedStatement/ResultSet Datenbankprogrammierung 16
F ResultSet to String[] Datenbankprogrammierung 3
E ResultSet in HashMap Datenbankprogrammierung 8
K Tabelle mit resultset refreshen? Datenbankprogrammierung 4
M Problem mit ResultSet bei SQL Server 2005 Datenbankprogrammierung 6
S ResultSet in ArrayList ablegen Datenbankprogrammierung 17
G Daten aus ResultSet in String-Liste Datenbankprogrammierung 13
T ResultSet initialisieren Datenbankprogrammierung 2
C kein Resultset Datenbankprogrammierung 2
G ResultSet: String mit Anführungszeichen einlesen Datenbankprogrammierung 8
T ResultSet-Inhalt in Arrays schreiben Datenbankprogrammierung 3
S ResultSet variabel auslesen Datenbankprogrammierung 4
D Anzahl der Elemente im ResultSet ermitteln Datenbankprogrammierung 8
A Leeres ResultSet mit H2 unter Vista Datenbankprogrammierung 3
S ResultSet closed Datenbankprogrammierung 2
Z ResultSet mit einer anderen Datenquelle Datenbankprogrammierung 7
O Spaltenname aus Resultset Datenbankprogrammierung 2
thE_29 ResultSet und doppelte Spalten Datenbankprogrammierung 4
E Neues select auf ein vorhandenes Resultset Datenbankprogrammierung 11
E ResultSet vergisst Reihe? Datenbankprogrammierung 2
N resultset aus andere klasse übergeben Datenbankprogrammierung 3
F ResultSet refresh moeglich? Datenbankprogrammierung 3
S ResultSet enthält keine Daten Datenbankprogrammierung 2
B Geschlossenes ResultSet Datenbankprogrammierung 6
T ResultSet#next Ungültige Reihenfolge (DB2) Datenbankprogrammierung 5
T ResultSet schließen? Datenbankprogrammierung 6
S Tabelle updaten wenn ResultSet aus JDBC-Quelle Datenbankprogrammierung 2
S ResultSet Datenbankprogrammierung 6
F Filtern innerhalb eines Resultset Datenbankprogrammierung 12
S Connection/Statement/ResultSet auf einmal geschlossen Datenbankprogrammierung 8
@ Like-Klausel; NPE bzw. leeres ResultSet Datenbankprogrammierung 4
C Resultset nach connection close weiterreichen Datenbankprogrammierung 5
B No ResultSet was produced Datenbankprogrammierung 2
S ResultSet erweitern ? Datenbankprogrammierung 4
E JDBC, ForwardOnly bei ResultSet nach Uebergabe Datenbankprogrammierung 4
R ResultSet liefert oracle.sql.TIMESTAMP, aber unbrauchbar Datenbankprogrammierung 9
A Probleme mit ResultSet und getString(i) Datenbankprogrammierung 13
RaoulDuke ResultSet - Wie arbeitet sowas intern Datenbankprogrammierung 2
N Probleme mit "nur vorwärts gerichtete ResultSet" Datenbankprogrammierung 7
G Für jede SQL-Abfrage eigenes Statement und ResultSet? Datenbankprogrammierung 3
T MAX und ResultSet#next Datenbankprogrammierung 10
R ResultSet zu bestimmtem DS navigieren Datenbankprogrammierung 4

Ähnliche Java Themen

Neue Themen


Oben