Así como un objeto de conexión crea la declaración y los objetos de estatemación preparada, también crea objetos de capricho que se utilizarán para ejecutar el procedimiento almacenado de la base de datos.
Crear un objeto CallableStatement:
Suponga que los siguientes procedimientos almacenados de Oracle deben ejecutarse:
Cree o reemplace el procedimiento getempname (emp_id en número, emp_first out varchar) asbegin seleccione primero en emp_first desde empleados donde id = emp_id; end;
Nota: Lo anterior ha escrito procedimientos almacenados en Oracle, pero estamos utilizando la base de datos MySQL, escribiendo los mismos procedimientos almacenados para MySQL de la siguiente manera, creándolo en la base de datos EMP:
Delimiter $$ Drop procedimiento Si existe `emp`.`getEmpName` $$ Crear procedimiento` emp`.`getEmpName` (en emp_id int, out emp_first varchar (255)) Comience seleccionar primero en emp_first desde empleados donde id = emp_id; end $$ delimitador;
Hay tres tipos de parámetros: In, Out and inout. El objeto preparado solo se usa en el parámetro. El objeto CallableStatement puede usar los tres.
Aquí están cada definición:
El siguiente fragmento de código muestra cómo instanciar un objeto CallableStatement basado en el procedimiento almacenado anteriormente utilizando el método Connection.PrepareCall ():
CallableStatement cstmt = null; try {string sql = "{call getempname (?,?)}"; cstmt = conn.prepareCall (SQL); . . .} Catch (Sqlexception e) {. . .} finalmente { . . .}El SQL de la variable de cadena representa un procedimiento almacenado, utilizando marcadores de posición de parámetros.
Usar un objeto CallableStatement es usar un objeto preparado. El valor debe estar vinculado a todos los parámetros antes de ejecutar la declaración, de lo contrario se recibirá una SQLException.
Si hay un parámetro en, simplemente siga las mismas reglas y trucos que se aplican al objeto Preparado de SEGURA; Use el método setxxx () correspondiente al tipo de datos Java para estar vinculado.
Cuando se usa parámetros Out e Inout, se debe utilizar RegistroutParameter () con el método adicional de CallableStatement. RegistroutParameter () Método Tipo de datos JDBC vinculado al procedimiento almacenado devuelto por el tipo de datos.
Una vez que se llama al procedimiento almacenado, el valor se recupera utilizando los parámetros de salida del método getxxx (). Este método emite valores de tipo SQL para recuperar los tipos de datos de Java.
Cierre el objeto CallableStatement:
Al igual que cerrar otros objetos de declaración, el objeto CallableStatement también debe cerrarse por la misma razón.
Una simple llamada al método Close () hará el trabajo. Si el objeto de conexión está cerrado primero, cerrará el objeto CallableStatement también. Sin embargo, el objeto CallableStatement siempre debe cerrarse explícitamente para garantizar la autorización correcta.
CallableStatement cstmt = null; try {string sql = "{call getempname (?,?)}"; cstmt = conn.prepareCall (SQL); . . .} Catch (Sqlexception e) {. . .} Finalmente {cstmt.close ();} PD: Instancia de objeto CallableStatement
Aquí hay un ejemplo de un procedimiento almacenado MySQL utilizando CallableStatement junto con el siguiente getempname ()::
Asegúrese de que el procedimiento almacenado se haya creado en la base de datos EMP. Se puede hacer usando el navegador de consulta MySQL.
Delimiter $$ Drop procedimiento Si existe `emp`.`getEmpName` $$ Crear procedimiento` emp`.`getEmpName` (en emp_id int, out emp_first varchar (255)) Comience seleccionar primero en emp_first desde empleados donde id = emp_id; end $$ delimitador;
Este código de script se ha escrito en función de la instalación del entorno y la base de datos en el capítulo anterior.
Copie el siguiente ejemplo jdbcexample.java, compile y ejecute como se muestra a continuación:
// Paso 1. Importar PackagesImport requerido java.sql.*; Clase pública JDBCEXAMPLE {// JDBC Nombre del controlador y base de datos URL estática Cadena final JDBC_DRIVER = "com.mysql.jdbc.driver"; cadena final estática db_url = "jdbc: mysql: // localhost/emp"; // credenciales de base de datos static final cadena user = "UserName"; static final string pass = "contraseña"; public static void main (string [] args) {Connection conn = null; CallableStatement stmt = null; Pruebe {// Paso 2: Registre JDBC Driver Class.forname ("com.mysql.jdbc.driver"); // Paso 3: abra un sistema de conexión.out.println ("Conectarse a la base de datos ..."); conn = drivermanager.getConnection (db_url, usuario, pase); // Paso 4: ejecute una consulta System.out.println ("Crear declaración ..."); Cadena sql = "{llamar getempname (?,?)}"; stmt = conn.prepareCall (SQL); // se une en el parámetro primero, luego une el parámetro int Empid = 102; stmt.SetInt (1, Empid); // Esto establecería ID como 102 // porque el segundo parámetro está fuera, así que registrarlo stmt.registerOutParameter (2, java.sql.types.varchar); // Use el método Ejecutar para ejecutar el procedimiento almacenado. System.out.println ("Ejecución del procedimiento almacenado ..."); stmt.execute (); // recuperar el nombre del empleado con el método getxxx string empname = stmt.getString (2); System.out.println ("EMP Name with ID:" + Empid + "IS" + Empname); stmt.close (); conn.close (); } catch (sqlexception se) {// manejar errores para jdbc se.printstackTrace (); } catch (excepción e) {// manejar errores para class.forname E.PrintStackTrace (); } Finalmente {// Finalmente bloqueado para cerrar los recursos, intente {if (stmt! = null) stmt.close (); } catch (sqlexception se2) {} // nada que podamos hacer intentar {if (conn! = null) conn.close (); } catch (Sqlexception SE) {SE.PrintStackTrace (); } // fin finalmente intente} // finalizar prueba system.out.println ("¡Adiós!"); } // end main} // end jdbcexampleAhora compile el ejemplo anterior de la siguiente manera:
C:> javac jdbcexample.java
Cuando se ejecuta JDBCEXample, produce los siguientes resultados:
C:> java jdbcexample
Conectando a la base de datos ... Crear declaración ... Ejecutando el procedimiento almacenado ... EMP Nombre con ID: 102 es Zaidgoodbye!
Sintaxis de Escape SQL de JDBC:
La sintaxis de Escape permite la flexibilidad de usar ciertas características de la base de datos utilizando métodos y propiedades JDBC estándar.
El formato general de sintaxis de escape SQL es el siguiente:
{Palabra clave 'Parámetros'}Aquí están lo siguiente que se encontrará muy útil al hacerlo en la programación JDBC:
D, T, TS Palabras clave:
Ayudan a determinar el texto de fecha, hora y sello de tiempo. Como saben, no se basan dos sistemas de gestión de bases de datos en la hora y la fecha de la misma manera. Esta sintaxis de escape le dice al controlador el formato, la fecha o la hora para renderizar a la base de datos de destino. Ejemplo de implementación:
{D 'yyyy-mm-dd'}donde aaa yyy = año, mm = mes, dd = día. Usar esta sintaxis {D '2009-09-03'} es el 9 de marzo de 2009.
Aquí hay un simple ejemplo de cómo insertar una tabla de fechas:
// Crear una declaración ObjectStmt = Conn.CreateStatement (); // Insertar datos ==> id, primer nombre, apellido, DobString sql = "Insertar en los valores de los estudiantes" + "(100, 'Zara', 'ali', {d '2001-12-16'})"; stmt.executupdate (sql);Del mismo modo, se puede usar una de las dos sintaxis siguientes, ya sea T o TS:
{t 'hh: mm: ss'}donde hh = horas, mm = minutos, ss = segundos. Usar esta sintaxis {T '13: 30: 29 '} es 1:30 pm 29 pm.
{ts 'aaa yyyy-mm-dd hh: mm: ss'}Estas son las dos sintaxis 'D' y 'T' anteriores para representar la sintaxis de la combinación de marca de tiempo.
Palabras clave de escape:
Esta palabra clave identifica el personaje escapado utilizado en la cláusula similar. Útil cuando se usa SQL Wildcard % donde se combinan cero o más caracteres. Por ejemplo:
String sql = "Seleccione símbolo de MathSymbols donde símbolo como '/%' {escapar ''}"; stmt.execute (sql);Si usa el personaje de Back -staghlash () como el personaje de escape, también debe usar dos personajes de barra de barra de barra de barra de Backs en la cadena Java Literal, porque la barra insegura también es un personaje de escape de Java.
Palabras clave FN:
Esta palabra clave significa usar funciones escalares en DBMS. Por ejemplo, puede usar la función de longitud SQL para calcular la longitud de una cadena GE:
{fn longitud ('hola mundo')}Esto devolverá 11, la longitud de la cadena 'Hello World'. .
Palabras clave de llamadas:
Esta palabra clave se utiliza para llamar a los procedimientos almacenados. Por ejemplo, para un procedimiento almacenado, necesita un parámetro In, use la siguiente sintaxis:
{llamar my_procedure (?)};Para un procedimiento almacenado, se requiere un parámetro In y se devuelve un parámetro de salida, utilizando la siguiente sintaxis:
{? = llamar my_procedure (?)}; Palabras clave de OJ:
Esta palabra clave se utiliza para representar una unión externa. La sintaxis es la siguiente:
{OJ Outer-Join}Tabla de unión externa = {izquierda | Derecha | Criterios de búsqueda completos} Full} Join {Tabla | Join externo}. Por ejemplo:
String sql = "Seleccione empleados de {oj thattable derecho externo unirse thattable en id = '100'}"; stmt.execute (sql);