El objeto Statement (sentencia) sirve para procesar una sentencia SQL estática y obtener los resultados producidos por ella. Solo puede haber un ResultSet abierto para cada objeto Statement en un momento dado. Todos los métodos statement que procesan una sentencia SQL cierran implícitamente el ResultSet actual de una sentencia si existe uno abierto.
Los objetos Statement se crean a partir de objetos Connection con el método createStatement. Por ejemplo, suponiendo que ya exista un objeto Connection denominado conn, la siguiente línea de código crea un objeto Statement para pasar sentencias SQL a la base de datos:
Statement stmt = conn.createStatement();
Las características de los ResultSets están asociadas con la sentencia que finalmente los crea. El método Connection.createStatement permite especificar estas características de ResultSet. A continuación se ofrecen algunos ejemplos de llamadas válidas al método createStatement:
Ejemplo: método createStatement
// El siguiente código es nuevo en JDBC 2.0 Statement stmt2 = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATEABLE); // El siguiente código es nuevo en JDBC 3.0 Statement stmt3 = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY, ResultSet.HOLD_CURSOR_OVER_COMMIT);
Para obtener más información acerca de estas características, consulte la sección ResultSets.
El proceso de sentencias SQL con un objeto Statement se realiza mediante los métodos executeQuery(), executeUpdate() y execute().
Si debe procesarse una sentencia de consulta SQL que devuelva un objeto ResultSet, debe utilizarse el método executeQuery(). Puede consultar el programa de ejemplo que utiliza el método executeQuery de un objeto Statement para obtener un ResultSet.
Nota: si una sentencia SQL que se procesa con el método executeQuery no devuelve un ResultSet, se lanza una SQLException.
Si se sabe que el código SQL es una sentencia de lenguaje de definición de datos (DDL) o una sentencia de lenguaje de manipulación de datos (DML) que devuelve una cuenta de actualización, debe utilizarse el método executeUpdate(). El programa StatementExample utiliza el método executeUpdate de un objeto Statement.
Si no se sabe cuál es el tipo de sentencia SQL, debe utilizarse el método execute. Una vez que se ha procesado este método, el controlador JDBC puede indicar a la aplicación qué tipos de resultados ha generado la sentencia SQL mediante las llamadas de API. El método execute devuelve true si el resultado es un ResultSet como mínimo, y false si el valor de retorno es una cuenta de actualización. Con esta información, las aplicaciones pueden utilizar los métodos de sentencia getUpdateCount o getResultSet para recuperar el valor de retorno del proceso de la sentencia SQL. El programa StatementExecute utiliza el método execute en un objeto Statement. Este programa espera que se pase un parámetro que sea una sentencia SQL. Sin mirar el texto de la sentencia SQL que el usuario proporciona, el programa procesa la sentencia y determina la información relativa a lo que se ha procesado.
Nota: la llamada al método getUpdateCount cuando el resultado es un ResultSet devuelve -1. La llamada al método getResultSet cuando el resultado es una cuenta de actualización devuelve nulo.
Los métodos del controlador JDBC nativo están sincronizados para evitar que dos hebras que se ejecutan en el mismo objeto provoquen daños en el mismo. Una excepción a esta norma la representa el método cancel. Una hebra puede utilizar el método cancel para detener una sentencia SQL de larga ejecución en otra hebra que opera sobre el mismo objeto. El controlador JDBC nativo no puede obligar a la hebra a detenerse; solo puede solicitarle que detenga la tarea que estaba realizando. Por esta razón, una sentencia cancelada tarda tiempo en detenerse. El método cancel puede utilizarse para detener consultas SQL incontroladas en el sistema.