Crear y utilizar PreparedStatements

Para crear objetos PreparedStatement nuevos, se utiliza el método prepareStatement. A diferencia de en el método createStatement, la sentencia SQL debe suministrarse al crear el objeto PreparedStatement. En ese momento, la sentencia SQL se precompila para su utilización.

Por ejemplo, suponiendo que ya exista un objeto Connection, el ejemplo siguiente crea un objeto PreparedStatement y prepara la sentencia SQL para que se procese en la base de datos:

     PreparedStatement ps = conn.prepareStatement("SELECT * FROM EMPLOYEE_TABLE
                                                  WHERE LASTNAME = ?");

Epecificar las características de ResultSet y el soporte de claves generadas automáticamente

Al igual que el método createStatement, el método prepareStatement se ha cargado a posteriori para proporcionar soporte para la especificación de características de ResultSet. El método prepareStatement también presenta variantes para trabajar con claves generadas automáticamente. A continuación se ofrecen algunos ejemplos de llamadas válidas al método prepareStatement:

Ejemplo: método prepareStatement

Nota: Lea la declaración de limitación de responsabilidad sobre el código de ejemplo para obtener información legal importante.
     // Nuevo en JDBC 2.0

     PreparedStatement ps2 = conn.prepareStatement("SELECT * FROM
         EMPLOYEE_TABLE WHERE LASTNAME = ?",

     ResultSet.TYPE_SCROLL_INSENSITIVE,
     ResultSet.CONCUR_UPDATEABLE);

     // Nuevo en JDBC 3.0

     PreparedStatement ps3 = conn.prepareStatement("SELECT * FROM
         EMPLOYEE_TABLE WHERE LASTNAME = ?",
         ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATEABLE,
         ResultSet.HOLD_CURSOR_OVER_COMMIT);

     PreparedStatement ps4 = conn.prepareStatement("SELECT * FROM
         EMPLOYEE_TABLE WHERE LASTNAME = ?", Statement.RETURN_GENERATED_KEYS);

Manejar los parámetros

Para poder procesar un objeto PreparedStatement, debe establecerse un valor en cada uno de los marcadores de parámetro. El objeto PreparedStatement proporciona varios métodos para establecer parámetros. Todos los métodos tienen el formato set<Tipo>, siendo <Tipo> un tipo de datos Java™. Son ejemplos de estos métodos setInt, setLong, setString, setTimestamp, setNull y setBlob. Casi todos estos métodos toman dos parámetros:

Consulte el Javadoc del paquete java.sql para obtener más información. Tomando la sentencia SQL preparada en los ejemplos anteriores del objeto ps, el código siguiente muestra cómo se especifica el valor de parámetro antes del proceso:

ps.setString(1,'Dettinger');

Si se intenta procesar una PreparedStatement con marcadores de parámetro que no se han establecido, se lanza una SQLException.

Nota: Una vez establecidos, los marcadores de parámetro conservan el mismo valor entre los procesos, a menos que se produzca una de las siguientes situaciones:
  • Otra llamada a un método set cambia el valor.
  • El valor se elimina cuando se llama al método clearParameters.

El método clearParameters identifica todos los parámetros como no establecidos. Una vez efectuada la llamada al método clearParameters, es necesario llamar de nuevo al método set en todos los parámetros antes del próximo proceso.

Soporte de ParameterMetaData

Una nueva interfaz ParameterMetaData permite recuperar información acerca de un parámetro. Este soporte es complementario de ResultSetMetaData, y es parecido. Se suministra información acerca de precisión, escala, tipos de datos, nombre de tipo de datos y si el parámetro permite el valor nulo.