java, beans og resultset
Jeg ønsker at finde en løsning på hvordan jeg på den mest hensigtsmæssige måde for behandlet data jeg skal benytte i en jsp-side.Jeg er ved at udvikle en dynamisk sidemenu som består af hovedkategorier med dertilhørende underkategorier som befinder sig i en jsp-side kaldet leftFrame.jsp - disse kategorier er linket sammen via nøgler og ligger i en MySQL database.
Mit design er bygget op omkring det såkaldte MVC-pattern eller model 2 princip med jsp, servlets og beans, men specielt hvad der vedrører databasen og connections virker lidt akavet.
Min kode er ikke helt veludviklet men jeg indsætter alligevel koden for at få en bedre fornemmelse af systemet.
Flowet forløber således: Min servlet kontaktes som det allerførste og præsentere en index-side bestående af 3 frames - en top, en left og en mainFrame som alle blot er jsp-sider. Min leftFrame kalder en metode i en bønne (KategoriBean) som udfører noget business logik hvad angår mine kategorier. Jeg føler det som overkill at benytte den abstrakte klasses(DBConnBean)'s metoder. Men dette fordi andre og nye bønner kan komme til løbende når systemet udviddes.
******************leftFrame.jsp***************************
<head><title>Kategori_test</title></head>
<body>
<%
System.out.println("Før metodekald til bønnen i leftFrame.jsp");
ResultSet reSetHK = kategori.getResultSetHK();
out.println("<table>");
while (reSetHK.next())
{
out.println("<tr><td><a href='hentUnderKat.jsp?id=" +reSetHK.getInt("HKID")+ "'>" +reSetHK.getString("Navn")+ "</a></td></tr>");
}
out.println("</table>");
/*
ResultSet reSetUK = kategori.getResultSetUK();
out.println("<table>");
while (reSetUK.next())
{
out.println("<tr><td><a href='hentUnderKat.jsp?id=" +reSetUK.getString("Navn")+ "'>" +reSetUK.getString("Navn")+ "</a></td></tr>");
}
out.println("</table>");
*/
%>
</body>
</html>
***********************abstract class DBConnBean***********
import java.sql.*;
import java.io.*;
import java.util.*;
import javax.servlet.http.*;
public abstract class DBConnBean //implements HttpSessionBindingListener
{
private Connection conn;
private Statement stmt;
private ResultSet results;
private static final String driver = "com.mysql.jdbc.Driver";
private static final String dbURL = "jdbc:mysql://localhost/metnet_portal_database_min";
private static final String login = "root";
private static final String password = "root";
//Konstruktøren opretten en database connection
public DBConnBean()
{
try
{
Class.forName(this.driver).newInstance();
this.conn = DriverManager.getConnection(this.dbURL, this.login, this.password);
this.conn.setAutoCommit(true);
this.stmt = conn.createStatement();
}
catch (ClassNotFoundException e)
{
System.err.println ("DBConnBean: Driver er ikke tilgængelig" + e.getMessage());
this.conn = null;
}
catch (SQLException e)
{
System.err.println("DBConnBean: Driveren blev ikke indlæst");
System.err.println("SQL Problem : " + e.getMessage());
System.err.println("SQL State : " + e.getSQLState());
System.err.println("Vendor Error: " + e.getErrorCode());
this.conn = null;
}
catch (InstantiationException e)
{
System.err.println(e.getMessage());
}
catch (IllegalAccessException e)
{
System.err.println(e.getMessage());
}
}
//Metode som returnere en database connection
public Connection getConnection()
{
return this.conn;
}
//Metode som gemmer data i databasen permanent
public void commit() throws SQLException
{
conn.commit();
}
//Metode som sætter databasen til den oprindelige tilstand f.eks.
//hvis en insert-statement ikke blev korrekt udført
public void rollback() throws SQLException
{
this.conn.rollback();
}
//metode som sætter AutoCommit til enten true eller false
public void setAutoCommit (boolean autoCommit) throws SQLException
{
this.conn.setAutoCommit(autoCommit);
}
//Metode som returner et resultset dvs. data der reurneres på
//baggrund af en select statement
public ResultSet executeQuery(String sql) throws SQLException
{
return this.results = stmt.executeQuery(sql);
}
//Metoden har til formål at opdatere databasen med nye data. Metoden
//returnere en int som fortæller hvor mange poster der er ændret/oprettet/slettet
public int executeUpdate(String sql) throws SQLException
{
return this.stmt.executeUpdate(sql);
}
********************class KategoriBean*********************
import java.sql.*;
import java.io.*;
import java.util.*;
import javax.servlet.http.*;
import Portalen_Nylle_Classes.DBConnBean;
public class KategoriBean extends DBConnBean
{
private ResultSet rsHK;
private ResultSet rsUK;
public KategoriBean()
{
super();
}
//Metoden henter Hovedkategorierne ved hjælp af DBConnBean
public void selectHovedKategori() throws SQLException
{
System.out.println("metoden selectHovedKategori");
String hKat;
hKat = "SELECT * FROM hovedkategori";
try
{
rsHK = this.executeQuery(hKat);
}
catch(SQLException sqle)
{
System.out.println("Error executeing update " +sqle);
}
//return hKatResult;
}
public ResultSet getResultSetHK() throws SQLException
{
System.out.println("metoden getResultSetHK");
this.selectHovedKategori();
return this.rsHK;
}
//Metoden henter Underkategorierne ved hjælp af DBConnBean
public void selectUnderKategori() throws SQLException
{
System.out.println("metoden selectUnderKategori");
String uKat;
uKat = "SELECT underkategori.Navn FROM underkategori, hovedkategori where hovedkategori.HKID = '" +rsHK.getInt("HKID")+ "' and underkategori.HKID = hovedkategori.HKID";
try
{
this.rsUK = this.executeQuery(uKat);
}
catch(SQLException sqle)
{
System.out.println("Error executeing update " +sqle);
}
//return uKatResult;
}
public ResultSet getResultSetUK() throws SQLException
{
System.out.println("metoden getResultSetUK");
this.selectUnderKategori();
return rsUK;
}
}
Jeg ønsker gerne svar mht. mit design og opbygningen hvis der findes en bedre måde, men det vigtigste er at jeg kan få kategorierne ud af databasen og behandle og få kategorierne vist i min leftframe således at når jeg klikker på en hovedkategori så vil underkategorierne blive vist under den hovedkategori som der blev klikket på.
på forhånd tak for hjælpen
hilsen Nylle =0)