2.2. Sentencias preparadas

 Las sentencias preparadas de JDBC permiten la “precompilación” del código SQL antes de ser ejecutado, permitiendo consultas o actualizaciones más eficientes. En el momento de compilar la sentencia SQL, se analiza cuál es la estrategia adecuada según las tablas, las columnas, los índices y las condiciones de búsqueda implicados. Este proceso, obviamente, consume tiempo de procesador, pero al realizar la compilación una sola vez, se logra mejorar el rendimiento en siguientes consultas iguales con valores diferentes.

 

Otra ventaja de las sentencias preparadas es que permiten la parametrización: la sentencia SQL se escribe una vez, indicando las posiciones de los datos que van a cambiar y, cada vez que se utilice, le proporcionaremos los argumentos necesarios que serán sustituidos en los lugares correspondientes. Los parámetros se especifican con el carácter ‘?’.

 

 

public class Actualizacion{
private PreparedStatement sentencia;
public void prepararInsercion(){
  String sql = "insert into personas values ( ?, ? ,? )";
  sentencia = conexion.prepareStatement(sql);
public void insertarPersona(String nombre, dirección, telefono)
{
   sentencia.setString(1, nombre);
   sentencia.setString(2, direccion);
   sentencia.setString(3, telefono);
   sentencia.executeUpdate();
  }
}

 

Al utilizar esta clase, obviamente, deberemos llamar primero al método que prepara la inserción, y posteriormente llamar tantas veces como sea necesario al método insertarPersona.

 

Se definen tres parámetros en la sentencia SQL, a los cuales se hace referencia mediante números enteros consecutivos:

 

String sql = "insert into personas values ( ?, ? ,? )";

 

 

 

Ejemplo

El segundo de los tres parámetros se especifica con sentencia.setString (2, direccion);

 

La clase PreparedStatement incluye un conjunto de operaciones de la forma setXXXX(), donde XXXX es el tipo de dato para los campos de la tabla. Una de esas operaciones es precisamente setString() que inserta la variable en un campo de tipo cadena.