Java - ¿como devolver un int en una consulta?

   
Vista:

¿como devolver un int en una consulta?

Publicado por javier (8 intervenciones) el 29/07/2016 18:50:45
Hola primero que nada gracias por leer mi post, me estoy programando una consulta en la cual recibo como parámetro una variable de tipo String desde un jsp, esta variable entra en mi método para obtener un ID que es de tipo entero, lo que quiero es devolver ese valor como respuesta a ese mismo jsp:

Este es mi código de mi clase consultas:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
public int getId(String usuario){
    	Statement st = null;
    	ResultSet rs = null;
    	try{
    		st = getConexion().createStatement();
    		String consulta = "select idpersona from persona where nombre='"+usuario+"'";
    		//ps.setParameter(1,usuario);
    		rs = st.executeQuery(consulta);
    		if(!rs.isBeforeFirst()){
    			System.out.println("No data");
    		}
    		while(rs.next()){
    			 int id = rs.getInt("idpersona");
    			 return id;
    		}
    		st.close();
    	}catch(Exception e)
    	{
    		System.err.println("error: "+e);
    		e.printStackTrace();
    	}
    }

Esta es la llamada del jsp donde envio la variable:

1
2
<%Consultas iduser = new Consultas();
			iduser.getId(usuario);%>

¿Como puedo verificar que si este llegando la variable a mi consulta?
Aparece un error en el método "Este método debe retornar un Entero"... De antemano gracias
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

¿como devolver un int en una consulta?

Publicado por sergio (1 intervención) el 30/07/2016 03:34:24
Si recibes mas de un id en tu consulta ejemplo:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
public static ArrayList<Integer> devuelveId(String totalInicio) {
	try {
		o = new ArrayList<>();
		cont = Conecta.obtenerConexion();
		ps = cont.prepareStatement(CONS);
		ps.setString(1, totalInicio);
		rs = ps.executeQuery();
		while (rs.next()) {
			u = rs.getInt(1);
			o.add(u);
		}
		if (o.isEmpty()) {
			System.out.println("No se encontraron registros");
			return null;
		} else {
			return o;
		}
	} catch (SQLException e) {
		// TODO: handle exception
		System.out.println("Error: --------> " + e.getLocalizedMessage());
		return null;
	} finally {
		if (cont != null) {
			try {
				cont.close();
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
				System.out.println("Error: --------> " + e.getLocalizedMessage());
			}
		}
	}
}

Y llamas a tu metodo así:

1
2
3
4
ArrayList<Integer> devuelto = Devuelve.devuelveId("161");
devuelto.forEach(r -> {
	System.out.println("Id encontados: " + r);
});
Si solo recibes un valor entero osea un solo id:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
public static int devuelveId(String totalInicio) {
	try {
		cont = Conecta.obtenerConexion();
		ps = cont.prepareStatement(CONS);
		ps.setString(1, totalInicio);
		rs = ps.executeQuery();
		while (rs.next()) {
			u = rs.getInt(1);
					System.out.println("El valor encontrado es: " + u);
		}
		return u;
	} catch (SQLException e) {
		// TODO: handle exception
		System.out.println("Error: --------> " + e.getLocalizedMessage());
		return 0;
	} finally {
		if (cont != null) {
			try {
				cont.close();
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
				System.out.println("Error: --------> " + e.getLocalizedMessage());
			}
		}
	}
}

Y llamas el unico valor así

1
2
int devuelto = Devuelve.devuelveId("161");
System.out.println("El id encontrado es: " + devuelto);

Saludos:
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
2
Comentar

¿como devolver un int en una consulta?

Publicado por javier (8 intervenciones) el 03/08/2016 20:37:25
Muchas gracias, tu respuesta me ayudo mucho, mi consulta quedo así:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
public int obtenerID(String nameUser){
    	PreparedStatement ps  = null;
    	Connection con = null;
    	ResultSet rs = null;
    	String query = "select idpersona from persona where nombre='"+nameUser+"'";
    	try{
    		con = getConexion();
    		ps = con.prepareStatement(query);
    		ps.setString(1, nameUser);
    		rs = ps.executeQuery();
    	while(rs.next()){
    			id = rs.getInt(1);
    		}
    		return id;
    	}catch(SQLException e)
    	{
    		System.err.println("error: "+e);
    		return 0;
    	} finally {
    		if (con!=null){
    			try{
    				con.close();
    			} catch (SQLException e){
    				e.printStackTrace();
    			}
    		}
    	}
    }

Ahora para llamar el resultado por qué colocas un valor en la función o que debo de referenciar?
1
int devuelto = Devuelve.devuelveId("161");
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

¿como devolver un int en una consulta?

Publicado por sergio (2 intervenciones) el 03/08/2016 22:54:53
Hola.
Si ves el ejemplo que hice, es un método estático:


1
2
3
4
5
public static int devuelveId(String totalInicio) {
.......................................................................
..........................................
//y todo lo demás
}

Por esa razón lo llamo desde donde quiero el dato que busco así:

//Llamo a la clase que tiene el método estático
// Devuelve y con su método estático.
//Ya en esta forma no creo el objeto Devuelve y después llamo el método.

1
2
int devuelto = Devuelve.devuelveId("161");
System.out.println("El id encontrado es: " + devuelto);
//Ejemplo si el metodo no fuera estatico
1
2
3
4
public int obtenerID(String nameUser){
...............................................
.................................
}
//tendría que crear el Objeto de la Clase
//Supuniendo que se llamase


1
2
3
Captura devuelve = new Captura(); //Creando el objeto captura
int valor = devuelve.devuelveid("151"); //Llamando el método que me devuelve el id
System.out.println("El id encontrado es: " + valor);
[/code]

//Se me hace mucho más cómodo referenciarlo directamente de la clase

Una cosa más; esta correcto tu método pero cuando utilizas un PrepareStament no se hace un query de esta forma, ya que el preparestatement por seguridad se hace de manera distinta a un Statement; esto te ayuda para prevenir errores de seguridad en tus consultas y así hacerlas más seguras.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
public int obtenerID(String nameUser){
 
    	PreparedStatement ps  = null;
 
    	Connection con = null;
 
    	ResultSet rs = null;
 
    	String query = "select idpersona from persona where nombre=?";
 
    	try{
 
    		con = getConexion();
 
    		ps = con.prepareStatement(query);
 
    		ps.setString(1, nameUser);
 
    		rs = ps.executeQuery();
 
    	while(rs.next()){
 
    			id = rs.getInt(1);
 
    		}
 
    		return id;
 
    	}catch(SQLException e)
 
    	{
 
    		System.err.println("error: "+e);
 
    		return 0;
 
    	} finally {
 
    		if (con!=null){
 
    			try{
 
    				con.close();
 
    			} catch (SQLException e){
 
    				e.printStackTrace();
 
    			}
 
    		}
             if(ps != null) {
              try {
                    ps.close();
             } catch(SQLException e) {
                e.printStackTrace();
           }
       }
    }
 }

Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
2
Comentar

¿como devolver un int en una consulta?

Publicado por javier (8 intervenciones) el 04/08/2016 18:39:52
Amigo mil gracias! Me ayudo tu explicación y cómo mencionaste hice estático el método, además corregir mi query para no tener problemas de seguridad.Excelente Día!
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