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

guardar ResulSet en otra estructura d Datos?

Estas en el tema de guardar ResulSet en otra estructura d Datos? en el foro de Java en Foros del Web. J2EE. Miren lo ke necesito es guardar mi conjunto de Registros (ResulSet) en una estrucura de datos, ya ke con los datos obtenidos de mi ...
  #1 (permalink)  
Antiguo 28/09/2004, 10:57
Avatar de xlugo2002  
Fecha de Ingreso: noviembre-2002
Ubicación: Puebla, México
Mensajes: 474
Antigüedad: 21 años, 5 meses
Puntos: 0
guardar ResulSet en otra estructura d Datos?

J2EE.

Miren lo ke necesito es guardar mi conjunto de Registros (ResulSet) en una estrucura de datos, ya ke con los datos obtenidos de mi ResultSet necesito hacer varias cosas (como listarlos, manipular cadenas) con lo ke no libero inmediatamente el resulset y connection y yo kiero liberar recursos como conexiones a bases de datos lo mas rapido posible.

En ASP uso alg como: RecordSet.getRows();, con lo ke , mi conjunto de resultados se almacenan en un array bidimensional, con lo ke puedo cerrar rapidamente los objetos recordset y connection, ahorrando recursos.

¿como puedo hacerlo en Java?

Última edición por xlugo2002; 28/09/2004 a las 11:00
  #2 (permalink)  
Antiguo 28/09/2004, 12:46
Avatar de ko^ke  
Fecha de Ingreso: septiembre-2001
Ubicación: México D.F.
Mensajes: 364
Antigüedad: 22 años, 7 meses
Puntos: 1
Espero que esto te de alguna idea,


Código PHP:
//Creamos el Resulset
        
Driver DriverrsCount = (Driver)Class.forName(MM_conn_DRIVER).newInstance();
        
Connection ConnrsCount DriverManager.getConnection(MM_conn_STRING,MM_conn_USERNAME,MM_c  onn_PASSWORD);
        
PreparedStatement StatementrsCount ConnrsCount.prepareStatement("SELECT * FROM tabla ");
        
ResultSet rsCount StatementrsCount.executeQuery(); 

while (
rsCount.next()){ //mientras tenga algo el resulset 
String columna rsCount.getString(1); // donde 1 es el numero de la columna del resulset
//metes la variable en un arreglo ArrayList y Listo a Cerrar conexiones 

__________________
Aquí va la firma...

Última edición por ko^ke; 28/09/2004 a las 12:50
  #3 (permalink)  
Antiguo 28/09/2004, 13:46
 
Fecha de Ingreso: agosto-2004
Mensajes: 11
Antigüedad: 19 años, 8 meses
Puntos: 0
Bueno, creo que tengo una respuesta que te puede servir.

Primero que nada, la estructura de la tabla o consulta que se encuentra almacenada en el recordset, deberá ser replicada en un objeto tipo javabean, llamado ValueObject (Patrón de diseño J2EE) o bien, Data Transfer Object (DTO).
Por ejemplo, la consulta sería algo así como:

select nombre, apellido,edad from Personas;

Se almacena en un recordset la consulta (lo que has hecho hasta ahora).

Deberás crear una clase Value Object, que replique los datos de la consulta y sus tipos:

public class PersonaVO implements java.io.Serializable {
private String nombre;
private String apellido;
private int edad;
public void setNombre(String nombre) { this.nombre = nombre; }
public void setEdad(int edad) {this.edad = edad;}
public void setApellido(String apellido) {this.apellido = apellido; }
public String getNombre() {return this.nombre;}
public String getApellido(){return this.apellido:}
public int getEdad() {return this.edad;}
} // fin de la clase

}

Ahora, cuando recuperes los valores de tu consulta por medio del recordset, hace lo siguiente (rs es nuestra variable ResultSet, en el caso de varios registros)

Collection arregloVOs = new ArrayList();
while (rs.next()) {
PersonaVO vo = new PersonaVO();
vo.setNombre(rs.getString("nombre"));
vo.setApellido(rs.getString("apellido"));
vo.setEdad(rs.getInt("edad"));
// colocar el ValueObject en un Arreglo
arreglosVOs.add(vo);
}

// para listar los datos:
Iterator iterator = arreglosVOs.iterator();
while (iterator.hasNext()) {
PersonaVO outVO = (PersonaVO)iterator.next();
System.out.println(outVO.getNombre());
System.out.println(outVO.getApellido());
System.out.println(outVO.getEdad());
}


Espero que esto haya servido de algo. Te recomiendo que veas el artículo de programación.com de patrones de diseño j2ee en un caso de estudio, el cual tiene código de ejemplo que emplea esta misma técnica en los DAO.

el sitio es http://www.programacion.com/java/articulo/inukisoft/

Suerte,
  #4 (permalink)  
Antiguo 28/09/2004, 15:29
Avatar de xlugo2002  
Fecha de Ingreso: noviembre-2002
Ubicación: Puebla, México
Mensajes: 474
Antigüedad: 21 años, 5 meses
Puntos: 0
ok... deja lo intento

Gracias cuate, dejame intentarlo de la forma que tu sugieres, a ver ke tal camina.


Saludos para toda la banda de NEZA desde Puebla, Pue; oye, dime como es el ambiente en NEZA, que es lo bueno y malo de vivir en el monstruoso y gigantezco valle de Mexico.

Última edición por xlugo2002; 28/09/2004 a las 16:40
  #5 (permalink)  
Antiguo 28/09/2004, 15:48
Avatar de ko^ke  
Fecha de Ingreso: septiembre-2001
Ubicación: México D.F.
Mensajes: 364
Antigüedad: 22 años, 7 meses
Puntos: 1
Que te puedo decir, hay de todo como en la viña del señor:

Lo más destacado:
Investigadores/cientificos
aqui

aqui

Deportistas/Medallistas Olimpicos
aqui
aqui

Y 4 millones de habitantes que se la rifan dia a dia como meseros, choferes, secretarias, rockeros, carteristas, marihuanos, narcos, contadores, webmasters ,
__________________
Aquí va la firma...
  #6 (permalink)  
Antiguo 28/09/2004, 16:47
Avatar de xlugo2002  
Fecha de Ingreso: noviembre-2002
Ubicación: Puebla, México
Mensajes: 474
Antigüedad: 21 años, 5 meses
Puntos: 0
ok..

Oye, y ke onda a ke te dedicas ? YO estudie la Lic. en Informatica en un Instituto Teconoligo Regional , egrese en el 98. ahora me gustaria poderme titular de la Lic. en el IPN. Actualmente trabajo como programador en una universidad medio famosa de la Cd, de Puebla.

Me pongo a tus ordenes con mis humildes conocimientos en ASP 3.0 y J2EE; en lo ke te pueda ayudar ya sabes.
  #7 (permalink)  
Antiguo 28/09/2004, 18:50
Avatar de xlugo2002  
Fecha de Ingreso: noviembre-2002
Ubicación: Puebla, México
Mensajes: 474
Antigüedad: 21 años, 5 meses
Puntos: 0
regresar al inicio del Iterator

do{
cuantRegs++;
iterator.next();
}while(iterator.hasNext());

Lo hago para saber el numero de resultados que obtengo... pero ahora necesito iterar otra vez de la misma forma... solo que parece que el Iterator ya ha recorrido toda la estructura y el indice o no se ke sea , parece ser que eta al final y no al principio,,, como me pongo de nuevo al principio para poder hace algo como:


do{
out.println...
........
......
iterator.next();
}while(iterator.hasNext());
  #8 (permalink)  
Antiguo 29/09/2004, 06:39
 
Fecha de Ingreso: agosto-2004
Mensajes: 11
Antigüedad: 19 años, 8 meses
Puntos: 0
Es más facil obtener la cantidad de resultados de la siguiente forma:

llama al método del ArrayList (Interfaz Collection) size(). El iterator no tiene este método. Entonces, no necesitarías usar un contador.

Además, te recomiendo que si tu método quiere devolver un conjunto de resultados, deberás tenerlo de una forma tal cual como la siguiente:

public Collection listPersonas() {
.... codigo
return el_array_list;
}

y es mejor aun, lo siguiente:
public Collection listPersonas(Connection conn) {
... recibe la conexión, y abre el ResultSet
return el_array_list;
}

Lo último te permite utilizar una conexión establecida en otra parte, por ejemplo en la fachada (ver patrón de diseño façace o session façade, buscalo en google). Así, podrás utilizas una conexión para varias operaciones.

Suerte.


PD: Hace poco salí de la U. Ahora estoy en mi primer trabajo, dandole duro a la cosa.
Te recomiendo que veas el artículo que te mencione en el post anterior, y busca los package llamados dao y facade. Ahi hay varios ejemplos de como se implementa una conexión con la menor cantidad de recursos comprometidos.

Suerte.
  #9 (permalink)  
Antiguo 29/09/2004, 06:41
 
Fecha de Ingreso: agosto-2004
Mensajes: 11
Antigüedad: 19 años, 8 meses
Puntos: 0
No Uses El Do ... While, Porque TendrÍas Un Error Si El Resultset Estuviera Vacio!!!!!!!!!!!
  #10 (permalink)  
Antiguo 29/09/2004, 08:41
Avatar de xlugo2002  
Fecha de Ingreso: noviembre-2002
Ubicación: Puebla, México
Mensajes: 474
Antigüedad: 21 años, 5 meses
Puntos: 0
ok; unas dudas mas..

PersonaVO vo = new PersonaVO();

¿como cierro o libero ese objeto?, esto es , destruir el objeo una vezque ya hice todo el show ????


Ahora dejenme ver como puedo paginar esos resultados , es decir como utulizar ese objeto en paginaciones ?¿?¿?¿¿¿¿¿¿¿

Actualmente con el resulset utilizo regs.absolute(x), para colocarme a partir de ke registro mostrar,,,lo anterior claro, para mostar paginaciones de resultados.

Última edición por xlugo2002; 29/09/2004 a las 09:06
  #11 (permalink)  
Antiguo 29/09/2004, 11:47
 
Fecha de Ingreso: agosto-2004
Mensajes: 11
Antigüedad: 19 años, 8 meses
Puntos: 0
Bueno.
El VO es un objeto simple, parecido al String. No hay necesidad de eliminarlo de forma explicita. Es mejor dejar esa tarea al administrador de memoria de java, el cual libera ese recurso de forma automática.

Para paginar resultados en una JSP, recomiendo que veas las etiquetas JSTL, en especial, la <c:forEach .... , ya que de esta forma es la forma más facil de iterar sobre resultados.

Para moverte a un registro especifico de resultados en un ResultSet, llama al método:

resultSet.absolutePosition(posicion_inicial).

Si quieres mostrar las 10 primera páginas, deberás partir desde el absolutePosition en 10, y luego iterar sobre un ciclo, mantiendo un contador de resultados. No es dificil, pero necesitarás práctica.

Recomiendo que envies un collection (arrayList) desde el Servlet a la JSP. El servlet recupera el collection con los datos, y luego invocas a request.setAttribute("listado",listadoCollection).

Suerte.
  #12 (permalink)  
Antiguo 29/09/2004, 15:49
Avatar de xlugo2002  
Fecha de Ingreso: noviembre-2002
Ubicación: Puebla, México
Mensajes: 474
Antigüedad: 21 años, 5 meses
Puntos: 0
Gracias constantino (a todos tambien)

Muy buenas recomendaciones en verdad, te agradezco tu tiempo, me estan sirviendo mucho tus Tips, si me atoro en algo, los estaré molestando otra vez.

Saludos !!!
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 13:14.