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

[SOLUCIONADO] [Consulta] ResultSet o PrepareStatement

Estas en el tema de [Consulta] ResultSet o PrepareStatement en el foro de Java en Foros del Web. Hola gente como estan Vengo usando el ResultSet para verificar un login, algo así: @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código Java: Ver original public ResultSet consultar ( String ...
  #1 (permalink)  
Antiguo 09/01/2014, 18:14
 
Fecha de Ingreso: agosto-2013
Mensajes: 90
Antigüedad: 10 años, 8 meses
Puntos: 1
[Consulta] ResultSet o PrepareStatement

Hola gente como estan

Vengo usando el ResultSet para verificar un login, algo así:

Código Java:
Ver original
  1. public ResultSet consultar(String sql) {
  2.  
  3.         ResultSet resultado = null;
  4.  
  5.         try {
  6.             resultado = consulta.executeQuery(sql);
  7.  
  8.         } catch (SQLException xp) {
  9.             System.out.println("Mensaje:" + xp.getMessage());
  10.            
  11.         }
  12.  
  13.         return resultado;
  14.  
  15.     }

Este código no tiene todo los de ingresar user y pass, eso es aparte, lo muestro para que vean como hago las consultas a la base de datos.

Y me ha funcionado bien, pero me he dado cuenta de que puedo sufrir de una Inyección Sql.

Entonces investigando me dicen que lo puedo hacer con PrepareStatement.

¿Cuales son las diferencias entre ambos?

Gracias
  #2 (permalink)  
Antiguo 10/01/2014, 01:20
Avatar de rgf1987  
Fecha de Ingreso: diciembre-2012
Ubicación: Asturias
Mensajes: 269
Antigüedad: 11 años, 4 meses
Puntos: 22
Respuesta: [Consulta] ResultSet o PrepareStatement

Buenos días,

efectivamente para evitar la inyección SQL se utiliza PrepareStatement, usarlo implica variar un poco la realización de la consulta, un ejemplo sería el siguiente, para hacer un insert en una BBDD

Código Java:
Ver original
  1. /*Creamos el prepare y  la sentencia SQL que deseamos ejecutar donde los parámetros vendrán identificados por interrogantes ? */
  2.         conexion.prepareStatement("insert into tabla values (?,?,?)");
  3. //Y para cada uno de los ? debemos cargar un parámetro usando uno de los métodos set que irán variando en función del tipo de dato que queremos añadir
  4. p.setInt(1, 2);
  5. p.setString(2, "Loquesea");
  6. p.setString(3, "Loquesea2");
  7. //De esta forma el insert que se estaría realizando sería el siguiente
  8. insert into tabla values(1, "Loquesea", "Loquesea2");

Con permiso de chuidiang, en su web tienes un apartado donde te viene todo esto bien explicado, además de mencionarte las ventajas y otras utilidades del PreparedStatement

http://www.chuidiang.com/java/mysql/...java-mysql.php
  #3 (permalink)  
Antiguo 10/01/2014, 15:00
 
Fecha de Ingreso: agosto-2013
Mensajes: 90
Antigüedad: 10 años, 8 meses
Puntos: 1
Respuesta: [Consulta] ResultSet o PrepareStatement

Cita:
Iniciado por rgf1987 Ver Mensaje
.......
Muchas gracias por el dato.
Entonces podría seguir utilizando el ResultSet para comparar los datos que ingresa el usuario con los de la base de datos.

Ya que como no se ingresa ningún dato, o sea no hago un INSERT INTO ...

Saludos.

PD: Sabes si es posible crear una interfaz gráfica divida en diferentes clases. Es que yo la he creado mas o menos de esta forma y me ha salido, pero quiero ver mas ejemplos y no he encontrado nada, es por la forma en que busco ya que no se .....
  #4 (permalink)  
Antiguo 11/01/2014, 06:15
Avatar de chuidiang
Colaborador
 
Fecha de Ingreso: octubre-2004
Mensajes: 3.774
Antigüedad: 19 años, 6 meses
Puntos: 454
Respuesta: [Consulta] ResultSet o PrepareStatement

Hola:

Prueba a que un usuario tenga en su nombre o en su password una comilla simple ' y mira a ver si funciona. El ResultSet no tiene nada que ver con el Statement o el PreparedStatement.

Sí, la interfaz gráfica se puede hacer en varias clases. Se puede hacer una clase por cada ventana que tenga. Si esas ventanas son grandes y complejas, pueden hacerse clases para paneles dentro de la ventana (JPanel con componentes dentro), sobre todo si estos paneles se pueden reutilizar en varias ventanas.

Se bueno.
__________________
Apuntes Java
Wiki de Programación
  #5 (permalink)  
Antiguo 11/01/2014, 09:57
 
Fecha de Ingreso: agosto-2013
Mensajes: 90
Antigüedad: 10 años, 8 meses
Puntos: 1
Respuesta: [Consulta] ResultSet o PrepareStatement

Cita:
Iniciado por chuidiang Ver Mensaje
Hola:

Prueba a que un usuario tenga en su nombre o en su password una comilla simple ' y mira a ver si funciona. El ResultSet no tiene nada que ver con el Statement o el PreparedStatement.

Sí, la interfaz gráfica se puede hacer en varias clases. Se puede hacer una clase por cada ventana que tenga. Si esas ventanas son grandes y complejas, pueden hacerse clases para paneles dentro de la ventana (JPanel con componentes dentro), sobre todo si estos paneles se pueden reutilizar en varias ventanas.

Se bueno.
Si entiendo el primer punto, entonces para hacer consultas también debería de usar el PreparedStatement?, es que a lo que yo entiendo, cuando hago una consulta yo solo saco datos no meto, entonces no importa si el usuario ingresa un nombre por ejemplo "O'connor" ya que este se guardaría en un String que nunca llega a entrar en la base de datos, solo se compara con lo que el ResultSet trae.
En lo que respecta a ingresar un nuevo usuario en la base de datos si tienes razón, ahí si puedo tener ese error.


En la parte de la GUI, yo he logrado hacerlo así, pero tengo miedo de que este mal porque tengo dudas. Cuando busco ejemplos de GUI me salen muy básicos o muy complejos, entonces no he logrado encontrar un ejemplo mas sencillo.

Muchas gracias.
  #6 (permalink)  
Antiguo 11/01/2014, 11:00
Avatar de chuidiang
Colaborador
 
Fecha de Ingreso: octubre-2004
Mensajes: 3.774
Antigüedad: 19 años, 6 meses
Puntos: 454
Respuesta: [Consulta] ResultSet o PrepareStatement

Hola:

Efectrivamente, es posible que no metas en base de datos el nombre al hacer la consulta, pero ... ¿Pones algo como "select .... where nombre='O'Connor'". Si es así, la consulta te fallará.

Se bueno.
__________________
Apuntes Java
Wiki de Programación
  #7 (permalink)  
Antiguo 11/01/2014, 13:55
 
Fecha de Ingreso: agosto-2013
Mensajes: 90
Antigüedad: 10 años, 8 meses
Puntos: 1
Respuesta: [Consulta] ResultSet o PrepareStatement

Gracias chudiang de verdad me has aclarado muchas dudas en este post.

Saludos.

Etiquetas: resultset, string
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 16:22.