# PreparedStatement: Seite zeigt nichts an



## donnar (5. Nov 2008)

Hallo ihr lieben,

zur Zeit möchte ich mit einem preparedStatement eine bestimmte Abfrage ausführen. Das preparedStatement (in der queryBean) ist wie folgt definiert:

```
public String getGericht(String idgericht){
     gericht = null;
     String query 	= "select * from GERICHTE where IDGERICHTE = ?";
     ResultSet  rs 	= null;
     try{ 
        PreparedStatement prepStatementGericht = connection.prepareStatement(query);
        prepStatementGericht.setString(1, idgericht);
        rs = prepStatementGericht.executeQuery();
        StringBuffer sb = new StringBuffer();

        while (rs.next()) {
          sb.append(rs.getString(3));
       } ...
return gericht;
}
```
Der Aufruf erfolgt über das ControllerServlet:

```
if (doAction.equals("gerichte")){
            String gericht = request.getParameter("gericht");
	queryBean.getGericht(gericht);
	url = "/web/jsp/gerichte.jsp";
         }
```
Und die JSP benutzt folgende Codezeile:

```
<jsp:getProperty name="queryBean" property="gericht" />
```
Und der Aufruf der Seite erfolgt zum ersten Mal hier:

```
<form action="<%=request.getContextPath()%>/servlet/ControllerServlet" method="get">    
                <input type="hidden" name="doAction" value="gerichte" />
                <input type="hidden" name="gericht" value="1" />
                <input type="image" src="<%=request.getContextPath()%>/web/img/gerichte_k.png" alt="gerichte" title="gerichte"/>
            </form>
```
Das Problem ist jetzt, dass die Browseradresszeile zwar den richtigen Wert anzeigt: "doAction=gerichte&gericht=1", die Seite jedoch gar nichts als Inhalt überliefert. Dh. es wird nichts angezeigt. 

Wo kann der Fehler liegen?


----------



## SlaterB (5. Nov 2008)

du hast da zwei verschiedene Dinge, zum einen die DB-Abfrage und zum anderen die JSP,

ob die DB-Anfrage funktioniert kannst du mit System.out.println() oder sonst wie einfach prüfen, 
entweder das klappt alles so wie soll oder nicht, dashat nichts mit JSP zu tun,

ob deine Formulare richtig aufgerufen/ weitergeleitet werden, die korrekten Parameter zurück kommen oder was auch immer 
kannst du alles mit Testdaten prüfen, das hat mit der DB nix zu tun,

-----

so, zwar keine direkte Hilfe, aber eine gewisse Klarstellung


----------



## donnar (5. Nov 2008)

Vielen Dank für die schnelle antwort. Dann teste ich mal fleißig.


----------



## donnar (5. Nov 2008)

Ich konnte den Fehler nun ausfindig machen: "Cannot find any information on type 'gericht' in bean JdbcQueryBean". In dieser Bean befindet sich die oben genannte Funktion "getGericht". Das verstehe ich jetzt nicht. Es gibt doch einen getter für den String gericht. Warum greift er dann nicht darauf zu?


----------



## SlaterB (5. Nov 2008)

du meinst hoffentlich nicht

public String getGericht(String idgericht){ 
}

denn erstens ist das kein richtiger getter, ein getter darf doch keinen Parameter haben,
welcher Wert sollte da nach welchen Regeln übergeben werden?

und zweitens ist es ganz schlimm, wenn ein einem Bean irgendwo in unkontrollierten Bereichen der automatischen Verarbeitung DB-Anfragen ausgeführt werden,

Web-Programmierung ist ganz einfach:
ein Request vom User landet in einem Servlet oder einer vergleichbaren Komponente,
dort werden DB-Anfragen ausgeführt und sonstige Informationen zusammengesammelt,

diese fertig geladenen einfachen, fehlerfreien DB-losen Daten werden dann in Beans oder ähnlich an JSPs weitergeleitet


--------

edit:
ich sehe, dass du anscheinend auch im normalen Java-Code
> queryBean.getGericht(gericht); 
aufrufst,
das ist schon viel besser, aber den Rückgabewert verwendest du gar nicht, was soll der Aufruf bewirken?
diesen Rückgabewert musst du nun irgendwo normal abspeichern, so dass später darauf zugegriffen wird und nicht nochmal die DB-Query ausgeführt wird

denn die Fehlermeldung bezieht sich doch auf die JSP-Verarbeitung oder?


----------



## donnar (5. Nov 2008)

Hallo nochmal,

das Problem ist, dass ich immer wieder an meine Grenzen stoße, da ich die Funktionsweise immer noch nicht ganz nachvollziehen kann. 

Ich dachte mir, dass es so funktioniert:
Es gibt eine JSP Datei, die einen Eintrag in die Browseradresszeile vornimmt. Diese wird per ControllerServlet ausgewertet. Zum einen wird im Servlet die benötigte Seite aufgerufen (gerichte.jsp) und zum anderen die Funktion getGericht ausgeführt, die eine *übermittelte Id** (aus der Adresszeile) in einem preparedStatement ausführen soll. 
Zum Schluss gibt es noch in den JSPs die möglichkeit Beans aufzurufen. Dieses Bean sollte in meinem Fall das Ergebnis der ausgeführten Abfrage herauslesen. 

Hab ich das nun richtig verstanden, oder bin ich noch immer auf den falschen Weg?




> welcher Wert sollte da nach welchen Regeln übergeben werden?   --> ***




Edit: Der Rückgabewert sollte in der JSP verarbeitet werden. Aus diesem Grund die Zeile: "<jsp:getProperty name="queryBean" property="gericht" />" Leider weiß ich nicht, ob das der richtige Weg ist.


----------



## SlaterB (5. Nov 2008)

> zum anderen die Funktion getGericht ausgeführt, die eine übermittelte Id* (aus der Adresszeile) in einem preparedStatement ausführen soll. 


wie in meinem edit im voherigen Post schon gefragt: was bringt dir die Ausführung des PreparedStatement, wenn du dir das Ergebnis nicht merkst?


> Dieses Bean sollte in meinem Fall das Ergebnis der ausgeführten Abfrage herauslesen. 

wie ist das Ergebnis denn gespeichert und wie kann es abgefragt werden?
du brauchst sowas wie

getFertigesGericht() {
return this.fertigesGericht;
}

mit einer entsprechenden Variable, die irgendjemand mit
setFertigesGericht(String); 
auch gesetzt hat


----------



## donnar (5. Nov 2008)

Super, dein Lösungsvorschlag funktioniert. Ich habe die ganze Zeit mit den getGericht gearbeitet, brauchte jedoch vorher noch ein setGericht(String).
Es lag wohl daran, dass die queryBean keinen richtigen getter hatte.

Vielen Dank. Das hilft mir so schon weiter


----------

