Sentencias preparadas


Introducción

Supongamos que hay un tipo de sentencia que se repite con frecuencia. En nuestro ejemplo podemos necesitar un informe de los clientes en función de su edad:

El problema de esto es que para todas y cada una de estas sentencias el gestor de bases de datos debe analizar y compilar. Esto supone un consumo innecesario de recursos. Podriamos tener preparado un esquema de sentencia y parametrizarlo en función de las necesiades del usuario. En resumen, las sentencias preparadas resultan más eficientes y más cómodas.

Un ejemplo

En este ejemplo vamos a preparar un esquema de sentencia que es parametrizable, para obtener los clientes en función de su edad. Los parámetros se indican con un interrogante (?):


	    //// Sentencia preparada
	    PreparedStatement st = con.prepareStatement( "select nombre,edad from cliente where edad >= ? and edad <=?");

	    //// El usuario nos da la edad minima y la máxima
	    BufferedReader entrada = new BufferedReader(new InputStreamReader(System.in));
	    System.out.print( "Edad mínima: ");
	    int edadMin = Integer.parseInt( entrada.readLine() );
	    System.out.print( "Edad máxima: ");
	    int edadMax = Integer.parseInt( entrada.readLine() );

	    //// Pongo los parámetros de la sentencia preparada (edad mínima y máxima)
	    st.setInt(1, edadMin );
	    st.setInt(2, edadMax );

	    //// Ejecuto sentencia y recorro el conjunto de resultados
	    ResultSet rs = st.executeQuery();
	    while ( rs.next() )
		System.out.println( "Nombre: " + rs.getString( "nombre" ) + ", Edad: " + rs.getInt( "edad" ) );

	    st.close();

Con el primer argumento de setInt() indicamos el número de parámetro que estamos definiendo: el primero y el segundo


Volver al índice