ResultSet auf JSP ausgeben?

Status
Nicht offen für weitere Antworten.

arend

Mitglied
hallo zusammen,

habe mich schon durchs forum gewuehlt, leider aber nicht die passende antwort auf mein problem gefunden. folgendes macht mir zu schaffen:


ich moechte / soll eine kleine (java)suchmaschine programmieren.

ich habe eine jsp-seite erstellt, auf der daten in ein formular eingegeben werden. beim klick auf den suche-button werden die daten an ein servlet geschickt. im servlet wird aus den eingabefeldern ein sql-statement formuliert und an die datenbank geschickt. die ergebnisse, die ich zurueckbekomme, liegen als string-werte vor. wenn die datenbankabfrage nur ein ergebnis liefert, ist das ganze recht simpel - man haengt die werte an die url dran und kann sie so auf der ausgabe-seite mit der getParameter()-methode auslesen.

soweit, so einfach :wink:

jetzt aber mein problem: :bahnhof:

was mache ich, wenn ich mehrere ergebnisse von der datenbank bekomme?
das auslesen der sql-ergebnistabelle mittels while-schleife ist noch recht einfach, ich habe zumindest die werte per System.out.printl() in der konsole ausgeben koennen - dieser teil klappt also. nur - wie bekomme ich die werte aus dem resultset in mein ausgabe-jsp geschrieben? das anhaengen der werte an die url kommt dafuer nicht in frage, da dies je nach system begrenzt ist.

kann evtl. jemand kurz ein quellcode-beispiel liefern? denke damit waere mir schon sehr geholfen. auf wunsch kann ich auch meinen bisherigen quellcode hier einstellen.

vielen dank schonmal,


arend
 

foobar

Top Contributor
Du könntest die Daten in eine JavaBean packen und dann die Bean im Servlet an die JSP weiterleiten. In der Jsp kannst du dann mit
Code:
<jsp:useBean class="myClass" id="bean"/>
<%= bean.myMethod() %>
auf die Bean zugreifen.
 

arend

Mitglied
danke, das klingt schon mal gut. hab noch nie was mit beans gemacht, ist aber eigentlich nix anderes als eine klasse, oder?

wie schiebe ich die daten vom servlet in die bean?
und wie muss eine bean aufgebaut sein?
 

foobar

Top Contributor
Eine JavaBean muß einen parameterlosen Konstruktor haben und Serializable implementieren. Alle Felder die von außen zugänglich sein sollen , müssen enstprechende Setter und Getter haben. Wenn das alles gegeben ist, muß die Bean und ein entsprechendes Manifest in ein Jar verpackt werden.
Im Servlet gibt es mehrere Möglichkeiten um Jsp's eine Bean zur Verfügung zu stellen.
Code:
protected void doPost(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException
{
    ....
  MyBean b = new MyBean();
   req.getSession.setAttribute("mybean", b);
    ......
}

In der Jsp:
Code:
<jsp:useBean class="myClass" id="mybean" scope="Session"/>
<%= mybean.myMethod() %>
Mit dem Tag useBean kannst du auf JavaBeans zugreifen. Du kannst jetzt über die Variable mybean auf , die im Servlet erzeugte Bean zugreifen.

P.S. Guck dir mal das Kapitel über Beans in Java ist auch eine Insel an
 

arend

Mitglied
bevor ich das probiere noch eine frage:

auf meiner startseite schicke ich formulardaten mit einem submit-button ab. muss ich bei 'action' das servlet angeben, an das die werte geschickt werden?

ein bekannter meinte, da gehoert die url der zielseite rein. wenn ich das mache, findet aber keinerlei verarbeitung der daten im servlet statt ...

???
 

foobar

Top Contributor
Klar mußt du im Formtag das Servlet angeben. Woher soll das Servlet sonst wissen was es machen soll?
 

arend

Mitglied
ok ... und wie definiere ich dann im servlet meine antwortseite?
also wie mache ich ihm klar, welche seite er als zielseite aufrufen soll?

bis hierher auf jeden fall schon mal danke fuer die zuegigen antworten! :)
 

foobar

Top Contributor
Code:
req.getRequestDispatcher(res.encodeURL("myjsp.jsp")).forward(req, res);
 

arend

Mitglied
hat soweit alles geklappt, danke!

eine frage hab ich noch: wie kann ich die anzahl der ergebnisse (zeilen) aus dem resultset auslesen, bevor ich es mit einer schleife durchlaufe? gibt es da irgendeinen weg?
 

foobar

Top Contributor
Benutz doch eine While-Schleife:
Code:
ResultSet rs = stmt.execute("SELECT col1 FROM tbl");
While (rs.next)
{
   System.out.println( rs.getString(1));
}
 

arend

Mitglied
mmh ja, die ist schon eingebaut.

ich schiebe die daten aus dem resultset in ein array. das array wollte ich aber dynamisch halten, das heisst die anzahl der 'zeilen' im array sollte mit einer variable belegt werden anstatt mit einem festen wert.

dafuer brauche ich vor dem durchlaufen des resultsets mit der whileschleife irgendeine moeglichkeit, an die anzahl der ergebnisse meiner sql-abfrage zu kommen...
 

foobar

Top Contributor
dafuer brauche ich vor dem durchlaufen des resultsets mit der whileschleife irgendeine moeglichkeit, an die anzahl der ergebnisse meiner sql-abfrage zu kommen...
Das geht nicht, da das Resultset ein Cursor in der DB ist. Benutz doch eine Collection z.b. einen Vector, der passt seine Größe automatisch an.
 

Heiko

Bekanntes Mitglied
foobar hat gesagt.:
dafuer brauche ich vor dem durchlaufen des resultsets mit der whileschleife irgendeine moeglichkeit, an die anzahl der ergebnisse meiner sql-abfrage zu kommen...
Das geht nicht, da das Resultset ein Cursor in der DB ist. Benutz doch eine Collection z.b. einen Vector, der passt seine Größe automatisch an.

Das stimmt, ich lese meine RS's auch immer in Vectoren ein. Geht ohne Probleme.
 

Heiko

Bekanntes Mitglied
So funktioniert das.
Wundere nicht über den rest vom Code, das ist aus einer riesigen Anwendung einfach rausgenommen.

Code:
Vector dop = new Vector();

				try
		{
			String query =
				"select * from "
					+ _dbap.getJdbc_sqlcollection()
					+ "."
					+ jdbc_Dateiname
					+ " ";
			
			prepstmt = null;
			prepstmt = connection.prepareStatement(query);
			int i = 1;

			ResultSet rs = prepstmt.executeQuery();
			int id = 0;

			while (rs.next())
			{

				An_angebevExBean db = resultSetToBean(rs);
				if (id != 0 && db.getLaufendeIdentNr() == id)
				{
					//System.out.println("Wert in dop: " + id);
					dop.add(db);

				}
				id = db.getLaufendeIdentNr();
				i++;
			}
			dop.insertElementAt(i+"",0);
 

foobar

Top Contributor
hab von vektoren noch nie was gehoert...
Na dann wirds aber Zeit ;-)

Code:
Vector v = new Vector(); // Vector initialisieren
ResultSet rs = stmt.execute("SELECT col1 FROM tbl");
While (rs.next)
{
   v.add( rs.getString(1)); // Vector mit Daten fuellen
}

// Vector durchlaufen und Daten ausgeben
Iterator it =  v.iterator();
while (it.hasNext())
{
     String s = (String) it.next();
     System.out.println( s );
}
 

arend

Mitglied
aah ... ihr macht 'nen wettbewerb ... deshalb immer diese unglaublich schnellen antworten ;)

kann ich einen vektor auch mehrdimensional anlegen oder muss ich mir das als eindimensionales, sequentielles konstrukt vorstellen?

was hab ich bei einem vektor - abgesehen von der variablen groesse - sonst noch fuer vorteile gegenueber arrays?
 

foobar

Top Contributor
kann ich einen vektor auch mehrdimensional anlegen oder muss ich mir das als eindimensionales, sequentielles konstrukt vorstellen?
Du kannst einen Vector auch n-dimensional anlegen.

2-dimensionaler Vector:
Code:
Vector outer = new Vector();
Vector inner = new Vector();
inner.add("hello world");
outer.add(inner);
System.out.println(  ((Vector)out.get(0)).get(0)  );

was hab ich bei einem vektor - abgesehen von der variablen groesse - sonst noch fuer vorteile gegenueber arrays?
Jede Menge ;-) Guckst du hier
 

arend

Mitglied
hab grad folgendes problem, vielleicht koennt ihr mir da auch weiterhelfen.
wenn die variable blz leer ist, also seitens des eingabeformulars keinen wert erhaelt, soll eine fehlerseite angezeigt werden.

komischerweise springt das servlet immer sofort in die else-anweisung, egal ob ich der variable blz im eingabefeld einen wert mitgebe oder nicht. was mach ich falsch?


Code:
//Variablen zur Aufnahme der Formularwerte
		String blz 		= null;
		String institut = null;
		String ort		= null;
		String plz 		= null;


		HttpSession session = request.getSession(true);
	
		blz 		= request.getParameter("blz");
		institut 	= request.getParameter("institut");
		ort			= request.getParameter("ort");
		plz 		= request.getParameter("plz");	
		
		if (blz == null)		
			{
				responseURL = "/fehler.jsp";
			} 
					
		else

                                               {	
				db.connect(db.dburl); 
				db.executeQuery(db.query1);
			}
 

foobar

Top Contributor
@arend Bitte verwende für jedes Thema einen eigenen Thread !!!
@J2ee-Mods Bitte Thread teilen.
 

Heiko

Bekanntes Mitglied
du musst das mit equals vergleichen.

Code:
String blz ="plz";

if(blz.equals("")){//tu was}
else{""tu was anderes}
 

arend

Mitglied
hat sich aber auch schon erledigt weil > es funktioniert
sorry nochmal, werd's das naechste mal beachten
 
Status
Nicht offen für weitere Antworten.

Ähnliche Java Themen

Neue Themen


Oben