Consultas SQL con parametros en Java JDBC

01/ago/2007 Java , 14 Comentarios
java

Contra una base de datos podemos ejecutar diferentes tipos de sentencias, desde una simple consulta, pasando por inserciones masivas, hasta una sentencia que aumente los permisos de un grupo de usuarios.

Pero ahora nos vamos a centrar en las consultas (SELECT) con Java JDBC. Este tipo de sentencias las utilizaremos para recuperar un conjunto de datos de la base de datos. En ellas, lo normal, es seleccionar un conjunto de campos de una tabla y mostrarlos por pantalla.

Claro esta que cuando abandonamos el ejemplo básico de la tabla de 10 registros y nos enfrentemos a tablas de millones y millones de datos, deberíamos, vamos, que sería bastante aconsejable, realizar algún tipo de filtro. Creo que cualquier administrador de bases de datos podría llegar a las manos con nosotros si ejecutamos una consulta sobre una tabla de clientes si no incluyésemos ningún filtro. Ahora, que si solo filtramos por ciudad igual a "Ávila", creo que también.

Bueno, a lo que vamos. Tenemos diferentes formas de realizar filtros en una consulta. El primer acercamiento es codificar directamente los valores en la sentencia. Algo como...

  1. SELECT nombre, edad, profesión, ciudad
  2. FROM personas
  3. WHERE ciudad = 'Ávila'
  4. AND edad BETWEEN 24 AND 32

Eso sí, esperemos que nuestro jefe no nos diga que quiere un informe donde introduciendo una ciudad y dos edades le saquemos el conjunto de personas que cumplen dichos requisitos.

A si que como somos muy previsores, montamos la siguiente consulta donde van a ir los parámetros como variables. Quedando algo así...

  1. String sCiudad, sEdad1, sEdad2;
  2. String sSQL = "SELECT nombre, edad, profesión, ciudad FROM personas WHERE ciudad = '" + sCiudad + "' AND edad BETWEEN " + sEdad1 + " AND " + sEdad1 + ";"

Pues este es uno de los mayores errores que podemos cometer y es que la concatenación de cadenas puede dar lugar a lo siguiente (si no tomamos la precauciones necesarias y si da la casualidad de que tenemos un usuario un poco avispado).

  1. sCiudad = "Avila";
  2. sEdad1 = "20";
  3. sEdad2 = "28; DELETE FROM cuentas";

Quedándonos en ejecución la siguiente consulta:

  1. SELECT nombre, edad, profesión, ciudad
  2. FROM personas
  3. WHERE ciudad = 'Ávila'
  4. AND edad BETWEEN 24 AND 32;
  5. DELETE FROM cuentas

Y creo que esta si que no le va a gustar nada a nuestro jefe.

Digamos que esto es un caso excepcional y que no debería de producirse. Es conocido como inyección de código SQL. Aún así, la forma más correcta de hacerlo sería mediante la inserción de parámetros.

Inicialmente, en Java JDBC, deberemos de poner una interrogación en cada sitio donde queramos meter un valor dinámicamente. Después, sustituiremos cada interrogación por un valor mediante el método setXXX del PreparedStatement. Donde XXX será el tipo de valor que queramos insertar: String, int, Date,... Así tendremos setString, setInt, setArray, setByte,...

¿Cómo saber por que interrogación se sustituye el valor? Pues, porque, el primer parámetro del método es el número de interrogación a sustituir (empezando por el 1).

  1. stmt = con.prepareStatement("SELECT nombre, edad, profesion, ciudad FROM Personas WHERE edad > ? AND ciudad = ?");
  2. stmt.setInt(1,25);
  3. stmt.setString(2,"Salamanca");

Vídeos sobre Java

Difunde el Conocimiento

Si te ha gustado el artículo o te ha sido de utilidad, no dejes de compartirlo con tus amigos en las redes sociales... Te estaremos muy agradecidos. :-D

14 comentarios en “Consultas SQL con parametros en Java JDBC”

Víctor Cuervo

Emmanuel

“Compartir es Aprender”

Gracias por tu tutorial Tio, me sacaste de un apuro!

Víctor Cuervo

marc85

que pasa si se envía un parámetro con valor nulo? cómo hacer para que se ejecute esa consuita a pesar de ese inconveniente?

Víctor Cuervo

Víctor Cuervo

@oscar,

Me alegro que te haya servido de ayuda. 😀

Víctor Cuervo

oscar

Muchas Gracias, es increible que una demucho tiempo atrás a solucionado la mía. De verdad agradecido.

Víctor Cuervo

Dorca Raquel

hola quisiera saber sobre inyeccion de codigo en java es una inv que tengo que entregar pero no encuentro nada me podrian ayudar?

Víctor Cuervo

gus

como podria hacer un login(usuario, contraseña) sabiendo que los datos lo tengo en una base de datos, y controlar los errores, como que exista el usuario y que la contraseña sea correcta?.

Víctor Cuervo

mariana

ayud porfavor necesito hacer una consulta de xquery desde java o NetBeans si no lo entrego tengo k repetir el semestre jjeje porfis

Víctor Cuervo

Giovanna

como insertar un resgistro en NetBeans usando SqlServer 2005
Gracias

Víctor Cuervo

jorge

como podia cear un query browser con java

Víctor Cuervo

HEGC

Como realizo una consulta en SQL 2005 desde JAVA programa que utilizo el el NetBeans 6.5

Desde ya gracias.

Salu2

Víctor Cuervo

Yanio

trabajo con netbeans y MySql, Estoy haciendo un trabajo donde persisto un dato en una tabla X, pero a la misma ves que lo persista necesito que me devuelva ese ID del elemento insertado para adicionarlo a otra tabla y no se como hacer la consulta.

Víctor Cuervo

claudia Torres

hola

Víctor Cuervo

lineadecodigo

La verdad es que no hay un setChar. En ese caso puedes apoyarte en un setString.

En algunas API propietarias, como es el caso de Oracle, si que tienen un setCHAR. Pero haría que tu código fuese poco portable, ya que la especificación JDBC no lo soporta.

Víctor Cuervo

dito

y para un char que setX hay?

¿Algo que nos quieras comentar?

Déjanos tu comentario, no te preocupes que tu email no será publicado

*


*