Originariamente inviato da SQLover
salve ragazzi,

vorrei separare il codice java da quello html di una pagina jsp che esegue una select su una tabella chiamata persona. Il punto di partenza č questa pagina jsp:

codice:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<title>Tabella Persona dell'utente Francesco - Risultato Query</title>
<meta http-equiv="content-type" content="text/html; charset=iso-8859-1">
<link rel="stylesheet" type="text/css" href="index.css">
</head>

<body>
	<div id="container">
		
			
		<%@page import="java.sql.*"%> 
      <% 
          ...
        //Prelevo i dati dal form
          String select=new String(request.getParameter("select"));
		  String from=new String(request.getParameter("from"));
		  String where=new String(request.getParameter("where"));
		  String having=new String(request.getParameter("having"));
		  String testo=new String(request.getParameter("testo"));  
 
          //Esecuzione istruzione SQL 
          Statement st = connection.createStatement(); 
          String SQL= new String ("");//OCCORRE INIZIALIZZARE la stringa SQL
          if(testo.length()==0) 
          	 SQL = "SELECT "+select+" FROM "+from+" WHERE "+where+";";
          	 
          else
          	SQL = testo;
          	
           //out.println(SQL);
           //out.println(testo.length());
         
          ResultSet rs = st.executeQuery(SQL); 
          
          
          
 
          //Elaborazione risultati 
          
        ResultSetMetaData rsmd = rs.getMetaData();
        int columnsNumber = rsmd.getColumnCount(); 
        String columnNames[];
        columnNames = new String[columnsNumber];
        for (int j = 0; j < columnsNumber; j++)
        {
        	columnNames[j] = rsmd.getColumnName(j + 1);
        }
         
        out.println("<table class=\"table\">");
        for (int k=0; k<columnNames.length; k++)
        {
        	out.println("<th>" + columnNames[k] + "</th>");	
        }
        //out.println("<th>Codice</th><th>Nome</th><th>Cognome</th><th>Etą</th><th>Cittą</th><th>Nazione</th>");  
        while(rs.next())
    		{
    			out.println("<tr>");
    			for(int i=1; i<=columnsNumber; i++)
		  			{
		  				
    					out.println("<td>" );
		  				out.println(rs.getString(i));
		  				out.println("</td>");
   						
     				} 
     			out.println("</tr>");
     			}
        out.println("</table>");      
    

      //chiude la connessione 
          connection.close(); 
      %> 
		
	</div>
</body>
</html>
Ecco come ho fatto io. Ho creato un file.java chiamato persona e il seguente metodo:

codice:
public ResultSet executeSelect(String SQL) throws ClassNotFoundException, SQLException 
		{
		    DBManager dbOracle = new DBManager("jdbc:odbc:OracleODBC", "francesco", "tiger");//creo un'istanza di DBManager
		  	dbOracle.startConnection();
		  	Statement st = dbOracle.connection.createStatement();
		  	
						try 
			{
							
				ResultSet rs = st.executeQuery(SQL);
				return rs;
					
			} 
			catch (SQLException e) 
			{
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			ResultSet rs = st.executeQuery(SQL);
			
			dbOracle.closeConnection();
			return rs;
		}
la pagina jsp che richiama il metodo č:

codice:
<%@page import="java.util.*"%>
<%@page import="myUtil.DBManager"%>
<%@page import="mioPackage.persona"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<title>Tabella Persona dell'utente Francesco - Risultato Query</title>
<meta http-equiv="content-type" content="text/html; charset=iso-8859-1">
<link rel="stylesheet" type="text/css" href="index.css">
</head>

<body>
	<div id="container">
		
			
		

		<%
		//Prelevo i dati dal form
          String select=new String(request.getParameter("select"));
		  String from=new String(request.getParameter("from"));
		  String where=new String(request.getParameter("where"));
		  String having=new String(request.getParameter("having"));
		  String testo=new String(request.getParameter("testo")); 
		//ESEGUO SELECT
		persona p = new persona ();
		String SQL = new String("");
		if(testo.length()==0) 
          	 SQL = "SELECT "+select+" FROM "+from+" WHERE "+where+";";
        else
          	SQL = testo;
        
      ResultSet rs = p.executeSelect(SQL);
        		ResultSetMetaData rsmd = rs.getMetaData();
		        int columnsNumber = rsmd.getColumnCount(); 
		        String columnNames[];
		        columnNames = new String[columnsNumber];
		        for (int j = 0; j < columnsNumber; j++)
		        {
		        	columnNames[j] = rsmd.getColumnName(j + 1);
		        }
         
        out.println("<table class=\"table\">");
        for (int k=0; k<columnNames.length; k++)
        {
        	out.println("<th>" + columnNames[k] + "</th>");	
        }

purtroppo ottengo il seguente errore:

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

An error occurred at line: 39 in the jsp file: /query.jsp
ResultSet cannot be resolved to a type
36: else
37: SQL = testo;
38:
39: ResultSet rs = p.executeSelect(SQL);
40: ResultSetMetaData rsmd = rs.getMetaData();
41: int columnsNumber = rsmd.getColumnCount();
42: String columnNames[];


An error occurred at line: 40 in the jsp file: /query.jsp
ResultSetMetaData cannot be resolved to a type
37: SQL = testo;
38:
39: ResultSet rs = p.executeSelect(SQL);
40: ResultSetMetaData rsmd = rs.getMetaData();
41: int columnsNumber = rsmd.getColumnCount();
42: String columnNames[];
43: columnNames = new String[columnsNumber];

Dove sbaglio??? Avete idee migliori?
mancano gli import per resultset e resultsetmetadata