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 = ?");
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
// 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);
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.
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.
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.