Java - Programar clase ResultSetToCollection

 
Vista:
Imágen de perfil de Octavio

Programar clase ResultSetToCollection

Publicado por Octavio (6 intervenciones) el 22/10/2015 04:17:41
Buenas noches, quiero programar una clase que apartir de un ResultSet devuelva los datos en una Colección de Java (set, lista, cola, array, map).

Uno de los métodos de la clase debe permitir devolver los datos del ResultSet en un LinkedHashMap, el punto importante es que el LinkedHashMap sólo contenga elementos del mismo tipo, ejemplo: <Integer, String>, <String, String>, etc., ya sea que al momento de llamar al método se espeficiquen los tipos de datos o que los tipos se indentifiquen deacuerdo a los tipos devueltos por el ResultSet.

Ilustro la idea:
1
2
3
4
5
6
public class ResultSetToCollection {
 
    //Este método debe devolver un LinkedHashMap con elementos del mismo tipo.
    public LinkedHashMap ResulSetToLinkedHashMap(ResultSet rs){
    }
}

¿Alguna idea de como lograr ésto?

¿Alguna otra sugerencia?


Gracias, saludos.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Lawliet
Val: 308
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Programar clase ResultSetToCollection

Publicado por Lawliet (303 intervenciones) el 22/10/2015 18:49:49
Hola...

Espero te sea de utilidad...

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public LinkedHashMap<Integer,String> ResulSetToLinkedHashMap(ResultSet rs){
	// Declaramos "Map" a llenar mediante nuestro "ResultSet".
	LinkedHashMap<Integer,String> linkedMap = new LinkedHashMap<Integer, String>();
	// Cachamos las exepciones correspondientes a "SQLException".
	try {
		// Recorremos nuestro "ResultSet"
		while(rs.next()){
			// Mientras exista resultado en nuestro "ResultSet" llenamos nuestro "Map".
			// Para ello hacemos uso del metodo "put()".
			// Es importante mencionar que como nuestro llave es del tipo "Integer" tenemos que hacer un "parse()" al valor recuperado o tendremos un error de compilacion.
			linkedMap.put(Integer.parseInt(rs.getString("nombreColumna")), rs.getString("nombreColumna"));
		}
                rs.close();
	} catch (SQLException sqle) {
		sqle.printStackTrace();
	}
	// Finalmente, retornamos nuestro "Map" lleno.
	return linkedMap;
}

Te doy unas observaciones para que empieces con las buenas prácticas, que son las recomendaciones en programación Java:

1.- Tu idea de retornar un Map para poder manipularlo después es la correcta, sin embargo, no es lo correcto que reciba como parámetro un ResultSet, ya que eso implica que tienes que llenarlo previamente para poder manipularlo. Lo adecuado es que solo mandes a ejecutar tu método y si recibes parámetros procura que esos parámetros tengan que ver con la forma en que vas a ejecutar tu consulta; es decir, si tu consulta que va a llenar el ResultSet tiene algún parámetro entonces es valido que el método reciba el parámetro que quieras agregar a tu consulta, posteriormente, hacer el trabajo con el ResultSet, pero no es tan bien visto la forma en que lo haces. Ejemplo:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
public LinkedHashMap<Integer,String> ResulSetToLinkedHashMap(Integer id){
	LinkedHashMap<Integer,String> linkedMap = new LinkedHashMap<Integer, String>();
	ResultSet rs = null;
	try {
		PreparedStatement stmtConsulta = conexion.prepareStatement("SELECT * FROM WHERE id = ?");
		stmtConsulta.setInt(1, id);
		rs = stmtConsulta.executeQuery();
		while(rs.next()){
			linkedMap.put(Integer.parseInt(rs.getString("nombreColumna")), rs.getString("nombreColumna"));
		}
		rs.close();
                stmtConsulta.close();
	} catch (SQLException sqle) {
		sqle.printStackTrace();
	}
	return linkedMap;
}

Como puedes observar, todo lo tiene relación con base de datos lo opero desde mi método pero como mi consulta recibe un parámetro pues ese valor lo recibo desde el parámetro de mi método, y ya lo paso con los métodos propios que tiene la clase PreparedStatement, lo cual es lo correcto y no concatenar todo con el típico signo "+".

2.- Debes estar consiente que el Map es un arreglo bidimensional; es decir, recibe una llave y un valor juntos, por lo que si solamente necesitas recuperar un valor; es decir, un arreglo con los resultados de tu base de datos, entonces es mejor retornes una Lista en vez de un Map. Ejemplo:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
public List<String> ResulSetToLinkedHashMap(Integer id){
	List<String> list = new ArrayList<String>();
	ResultSet rs = null;
	try {
		PreparedStatement stmtConsulta = conexion.prepareStatement("SELECT * FROM WHERE id = ?");
		stmtConsulta.setInt(1, id);
		rs = stmtConsulta.executeQuery();
		while(rs.next()){
			list.add(rs.getString("nombreColumna"));
		}
		rs.close();
		stmtConsulta.close();
	} catch (SQLException sqle) {
		sqle.printStackTrace();
	}
	return list;
}

Sin mas que comentar, cualquier duda y/o inquietud, aquí estamos. Suerte!

P.D. Cualquier aclaración del porque tal cosa puedes agregarme a mi Skype mediante mi correo (Puedes ver mi correo a lado de mi nombre) y con gusto te aclaro sin compromiso.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar