Foros del Web » Programación para mayores de 30 ;) » Java »

Struts 1.2.9 (NB6.1) - Problemas con ResultSet para el mostrado de Datos

Estas en el tema de Struts 1.2.9 (NB6.1) - Problemas con ResultSet para el mostrado de Datos en el foro de Java en Foros del Web. Para evitar lo de los beans en el mostrado de datos quice utilizar un resultset q paso desde personaDAO Código: static public ResulSet listar_personas() throws ...
  #1 (permalink)  
Antiguo 06/11/2009, 15:21
 
Fecha de Ingreso: enero-2007
Mensajes: 63
Antigüedad: 17 años, 3 meses
Puntos: 2
Pregunta Struts 1.2.9 (NB6.1) - Problemas con ResultSet para el mostrado de Datos

Para evitar lo de los beans en el mostrado de datos quice utilizar un resultset q paso desde personaDAO

Código:
 static public ResulSet listar_personas() throws Exception {

        PreparedStatement ps = null;
        ResultSet rs = null;
        conexion db = new conexion();
        Connection cnn = db.getConnection();

        try {
            String sql = "select * from personas";                   
            ps = cnn.prepareStatement(sql);            
            rs = ps.executeQuery();  
	       
        } finally {
            if (cnn != null) {
                cnn.close();
            }
        }
        return rs;
    }
y lo paso al jsp por el Action

Código:
	ResultSet rs = personaDAO.listar_personas();
        request.setAttribute("rsPersonas", rs);

        return mapping.findForward("verPersonas");
y en el jsp no se como llenar la tabla con el ResulSet y el <logic:iterator>

pero al hacer la prueba con un text para ver si me devuelve datos el ResultSet

Código:
<%@ page import="java.sql.ResultSet" %>
...

Nombres: <input type="text" value='<%=((ResulSet) request.getAttribute("rsPersonas")).getString("nombres") %>'>
me sale un error sql q me dice "la conexion esta cerrada" ... viendo el codigo este error es obvio ya q antes de devolver el ResultSet cierro la conexion en el personaDAO

Entonces me pregunte si existe una forma de mantener el ResultSet estando cerrada la conexion y me encontre con com.sun.rowset.CachedRowSetImpl q es como una copia del ResulSet pero q permance activa a pesar de haber cerrado la conexion ...

modificando personaDAO

Código:
 static public CachedRowSetImpl listar_personas() throws Exception {

        PreparedStatement ps = null;
        ResultSet rs = null;
        conexion db = new conexion();
        Connection cnn = db.getConnection();
	CachedRowSetImpl c = new CachedRowSetImpl();

        try {
            String sql = "select * from personas";                   
            ps = cnn.prepareStatement(sql);            
            rs = ps.executeQuery();

	c.populate(rs);  
	       
        } finally {
            if (cnn != null) {
                cnn.close();
            }
        }
        return c;
    }

el problema es q no se como acceder a los datos de cada columna q tiene el objeto y despues hacerlo trabajar con el <logic:iterator> en el jsp (lo mismo me sucede con el ResultSet q comente al inicio)

Existe alguna otra forma de poder capturar los datos, mantenerlos y mostrarlos??? sin necesidad de un ResulSet, CachedRowSetImpl o bean??? O se podra simplemente con estos...como???



gracias por todo de antemano
  #2 (permalink)  
Antiguo 07/11/2009, 16:19
 
Fecha de Ingreso: enero-2007
Mensajes: 63
Antigüedad: 17 años, 3 meses
Puntos: 2
De acuerdo Respuesta: Struts 1.2.9 (NB6.1) - Problemas con ResultSet para el mostrado de Datos

...siguiendo con la investigacion ...

ya logre hacer lo q deseaba ... mostrar datos de un resulset en mi jsp


Hay q tener en cuenta lo siguiente

1. Personalmente no me gusta mucho el uso de beans ya q los veo en algunos (o en la mayoria) de los casos innecesarios (disculpen mi ignorancia, si es q me equivoco x favor haganmelo saber) Debido a esto estuve buscando otras formas de capturar, almacenar y mostrar los datos desde la BD hacia un jsp y es ahi donde encontre los JSTL :)

2. los jstl tienen una especie de resultset llamado Result (javax.servlet.jsp.jstl.sql.Result) y q junto con ResultSupport (javax.servlet.jsp.jstl.sql.ResultSupport) nos ayudaran a obtener nuestro objetivo Lo execelente de este Result es q se mantiene a pesar de haber cerrado la conexion del ResultSet :) ...esto nos sera de muchisima ayuda

3.Descargamos los jstl jar necesarios jstl.jar y standard.jar y los agregamos a nuestro proyecto. Ademas tb bajar el c.tld y ponerlo junto a los otros tlds (no recuerdo exactamente la pagina pero con la ayuda de google... ;) )

4. configurar el web.xml y agregarle

Código:
  	<taglib>
            <taglib-uri>/WEB-INF/c.tld</taglib-uri>
            <taglib-location>/WEB-INF/c.tld</taglib-location>
        </taglib>
5.Listo! con esto ya podemos utilizar los jstl en nuestro proyecto. Ahora ... en comentariosDAO

Código:
import javax.servlet.jsp.jstl.sql.Result;
import javax.servlet.jsp.jstl.sql.ResultSupport;

...

  static public Result listar_comentarios() throws Exception {

        PreparedStatement ps = null;
        ResultSet rs = null;
        conexion db = new conexion();
        Connection cnn = db.getConnection();
        Result result = null;
        
        try {
            String sql = "select comentario,fecha,usuario from comments";
            ps = cnn.prepareStatement(sql);

            rs = ps.executeQuery();
            
            result = ResultSupport.toResult(rs);
            
        } finally {
            if (cnn != null) {
                cnn.close();
            }
        }
        return result;
    }
in the Action class

Código:
import javax.servlet.jsp.jstl.sql.Result;
import javax.servlet.http.HttpSession;

...
 	Result rs = categoriaDAO.listar_categoria();
        HttpSession s = request.getSession(true);
        s.setAttribute("rs", rs);
y para mostrar los comentarios usare una tabla diferente a la habitual grilla (diseñisticamente hablando .. asi se dice?? je! )

comments.jsp

Código:
<%@ taglib uri="/WEB-INF/c.tld" prefix="c" %>

...

 <h3>Ver Comentarios</h3>
                    <hr>                             
                    <html:form action="/verComentarios">
                         <table width="680" border="1">
                            <tbody>                                                                
                                <c:forEach var="row" items="${rs.rows}">
                                    <tr>
                                        <td colspan="2" align="left" valign="middle">
                                            Usuario:&nbsp;<b><c:out value="${row.usuario}"/></b>
                                        </td>
                                        <td width="226" align="right" valign="middle">
                                            Fecha:&nbsp;<b><c:out value="${row.fecha}"/></b>
                                        </td>
                                    </tr>
                                    <tr>
                                        <td colspan="3" align="left" valign="middle"><c:out value="${row.comentario}"/></td>
                                    </tr>                                    
                                </c:forEach>  
                            </tbody>
                        </table>                        
                    </html:form>
Voila! Con esto ya tenemos nuestra tabla con datos en nuestro jsp (Los $ me hacen recordar a php ... jeje aquellos tiempos) ... facil no?

...acerca de "usare una tabla diferente a la habitual grilla" lo dije debido a q muchas veces deseamos mostrar los datos no solo como columnas y filas (grilla). Si ven el diseño de la tabla del jsp me entenderan ;)

Un claro ejem de esto (en .NET) es la existencia de 2 controles para mostrar los datos el GridView (grilla) y el DataList (q es algo como lo q intento hacer con este ejem) ... los q saben .nET me comprenderan ;)

Bueno sin querer como q me salio un minitutorial jejeje ... Espero le sea esto a alguien de mucha ayuda (ya q me demore a lot of time searching the info)

...ojo q este metodo lo implemente debido a lo facil y practico q es (y como dije I don't like the beans!) ... si alguien (con experiencia en Struts xq yo recien me estoy iniciando) tiene alguna mejor manera de hacerlo pues bienvenido sea para bien de todos :)


Salu2
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 04:00.