# problem mit resultset



## shAGGie (19. Mrz 2008)

```
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<%@page import="de.kvdrfehl.db.*"%>
<%@page import="java.sql.*"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>KVdR Fehlermanagement</title>
</head>
<body>

<table border="1"><tr><td>
<form action="?" method="POST">
	<select name="VSNR">
		<%	while (ResultSets.getRSA()[13].next()){%>
			<option><%=ResultSets.getRSA()[13].getString(2) %></option>	
		<%} %>
	</select>
</form>
</td><td>blubb</td></tr>
</table>

</body>
</html>
```

hier soll ein select dynamisch mit options gefüllt werden mittels einer funktion die sich auf diese klasse bezieht


```
package de.kvdrfehl.db;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class ResultSets {
	private static ResultSet[] rsa = new ResultSet[17];
	private static ResultSet rsTables = null;
	private static Statement dbstat = null;
	
	public static ResultSet[] getRSA(){
		try{
		int i = 0;
		dbstat = DBConnection.getConnection().createStatement();
		rsTables = dbstat.executeQuery("SELECT TABLE_NAME FROM USER_TABLES");
		while(rsTables.next()){
			rsa[i] = dbstat.executeQuery("SELECT * FROM " + rsTables.getString(1));
			i++;
		}	
		}catch(SQLException e){
			System.out.println("Tabellen konnten nicht gefunden werden.");
		}
		return rsa;
	}
}
```

doch das resultsetarray rsa wird als null zurückgegeben ...
und ich bekomm ne nullpoiunterexception

was daran funktioniert nicht ...


----------



## SlaterB (19. Mrz 2008)

> while (ResultSets.getRSA()[13].next()){

hier wird in jedem Schleifendurchlauf ResultSets.getRSA() neu aufgerufen, also alle Queries neu, und next() ist damit immer bei ersten Element,
falls du nicht gerade deine Exception bekommen würdest,

--------

wenn du mit einem Statement mehrere ResultSet lädst,
dann werden die vorherigen schon wieder geschlossen
-> Exception bei next() wenn du nicht eh schon genug andere bekommen würdest


--------
Tipp:
teste das ganze in einem normalen Java-Programm/ in einem Servlet
(was du bei all den obigen Fehlern anscheinend noch nie gemacht hast)

wenn es da geht, im JSP dann aber aber nicht mehr,
dann prüfe Schritt für Schritt per Debugger oder System.out.println(), was anderes ist


----------



## shAGGie (19. Mrz 2008)

ahhhhhhhhhhhhhhh das natürlich ne problemquelle das die methoide immer wieder neu aufgerfuen wird. hab jetzt nen 2. resultsetarray erstellt in dem zum schluss der methode der gefüllte array übergeben wird. dieser kann dann mit na gettermethode abgeholt werden.

somit wird nur einmal das resultsetarray gefüllt ...

aber jetzt hab ichn neune fehler


```
org.apache.jasper.JasperException: Unable to compile class for JSP

An error occurred at line: 15 in the jsp file: /Main.jsp
Generated servlet error:
The method getRSAll() is undefined for the type ResultSets

An error occurred at line: 16 in the jsp file: /Main.jsp
Generated servlet error:
The method getRSAll() is undefined for the type ResultSets
```


----------



## SlaterB (19. Mrz 2008)

> ich bekomm ne nullpoiunterexception 

vielleicht ist übrigens das Array nicht null, sondern das Element an Position 13,
das wird ja recht vage mit  while-i-Schleife gesetzt

aber alles denkbar einfach zu prüfen mit System.out.println oder Debugger (oder Forum  )

--------

edit:

> The method getRSAll() is undefined for the type ResultSets 

sowas sind doch dankbare Exceptions, entweder Tippfehler oder veraltete .class-Datei,
evtl. auch fehlende Sichtbarkeit (static, public)


----------



## shAGGie (19. Mrz 2008)

war ne veraltete class, hat sich schnell geklärt. aber

wie du schon sagtest hab ma mit syso geschaut was an 13. stelle in dem array iws, nämlich nichts.

nur an 0. bzw. erster stelle im array scheint was drin zu sein.

also funktioniert die setRSAll() Funktion nicht richtig weil sie nur die erste tabelle in array schreibt .... hmmm was is an der logik falsch ....

achja danke für die hilfe is wirklich sehr hilfreich 2 unabhängige augen zur verfügung zu ahben mit nem anderen denkapparat dahinter


----------



## SlaterB (19. Mrz 2008)

immer schön ruhig schön einfach anfangen, z.B.

rsTables = dbstat.executeQuery("SELECT TABLE_NAME FROM USER_TABLES"); 
      while(rsTables.next()){ 
System.out.println("nächste ist: "+..);
         i++; 
      }    

wenn da deiner Meinung nach zu wenig/ keine kommen, 
dann versuchst du als nächstest

rsTables = dbstat.executeQuery("SELECT count(*) FROM USER_TABLES"); 

wenn da 0 kommt, dann kann Java nun wirklich nix mehr dafür 
alles einfach herauszufinden


----------



## shAGGie (19. Mrz 2008)

sorry bin rookie  aber danke werds schnell mal probieren

edit1:

soo er liest nur die erste tabelle ein
scheinbar liegt in rsTables nur der name der ersten tabelle drin ... hmmm

EDIT2:

sag mal wie kann ich aus nem resultset auslesen wieviele rows bzw. zeilen der hat. colums geht ja über getmetadata. aber rows nicht..will die rows counten

ciao


----------

