Fuente del artículo: Foro de bases de datos Autor: jackma
La API Java Database Connectivity (JDBC) es una serie de interfaces que permiten a los programadores de Java acceder a bases de datos. Las interfaces de varios desarrolladores no son exactamente iguales. Después de usar JDBC de Oracle durante muchos años, he acumulado muchas habilidades que pueden permitirnos utilizar mejor el rendimiento del sistema y lograr más funciones.
1. Utilice un controlador Thin en el desarrollo de software de cliente
En términos de desarrollo de software Java, la base de datos de Oracle proporciona cuatro tipos de controladores, dos para software de cliente, como software de aplicación, subprogramas y servlets, y los otros dos para software del lado del servidor, como procedimientos almacenados de Java en la base de datos. En el desarrollo de software del lado del cliente, podemos elegir el controlador OCI o el controlador Thin. El controlador OCI utiliza la interfaz de localización Java (JNI) para comunicarse con la base de datos a través del software cliente de Oracle. El controlador Thin es un controlador Java puro que se comunica directamente con la base de datos. Para obtener el máximo rendimiento, Oracle recomienda utilizar controladores OCI en el desarrollo de software cliente, y esto parece ser correcto. Pero recomiendo usar el controlador Thin, porque a través de muchas pruebas se ha descubierto que el rendimiento del controlador Thin supera al del controlador OCI en circunstancias normales.
2. Desactive la función de envío automático para mejorar el rendimiento del sistema.
Cuando establece una conexión con la base de datos por primera vez, la conexión está en modo de confirmación automática de forma predeterminada. Para un mejor rendimiento, puede desactivar la función de confirmación automática llamando al método setAutoCommit() de la clase Connection con un parámetro booleano falso, como se muestra a continuación:
conexión.setAutoCommit(falso);
Vale la pena señalar que una vez que se desactiva la función de confirmación automática, debemos administrar manualmente la transacción llamando a los métodos commit() y rollback() de la clase Connection.
3. Utilice objetos de declaración en SQL dinámico o comandos de tiempo limitado
Al ejecutar comandos SQL, tenemos dos opciones: puede usar objetos PreparedStatement u objetos Statement. No importa cuántas veces utilice el mismo comando SQL, PreparedStatement solo lo analiza y compila una vez. Cuando se utiliza el objeto Declaración, cada vez que se ejecuta un comando SQL, se analiza y compila. Esto podría hacerle pensar que usar objetos PreparedStatement es más rápido que usar objetos Statement. Sin embargo, las pruebas que he realizado muestran que en el software cliente este no es el caso. Por lo tanto, en operaciones SQL de tiempo limitado, a menos que los comandos SQL se procesen en lotes, deberíamos considerar el uso de objetos Statement.
Además, el uso de objetos Statement también facilita la escritura de comandos SQL dinámicos porque podemos concatenar cadenas para crear un comando SQL válido. Por lo tanto, creo que el objeto Statement puede facilitar la creación y ejecución de comandos SQL dinámicos.
4. Utilice funciones auxiliares para formatear comandos SQL dinámicos
Al crear comandos SQL dinámicos ejecutados utilizando objetos Statement, debemos abordar algunos problemas de formato. Por ejemplo, si queremos crear un comando SQL que inserte el nombre O'Reilly en una tabla, debemos reemplazar el signo "'" en O'Reilly con dos signos "''" consecutivos. La mejor manera de hacer esto es crear un método auxiliar que realice la operación de reemplazo y luego usar el método auxiliar creado cuando la cadena de conexión se exprese como un comando SQL usando una fórmula. De manera similar, podemos hacer que el método auxiliar acepte un valor de Fecha y luego generar una expresión de cadena basada en la función to_date() de Oracle.
5. Utilice objetos PreparedStatement para mejorar la eficiencia general de la base de datos.
Cuando se utiliza un objeto PreparedStatement para ejecutar un comando SQL, la base de datos analiza y compila el comando y luego lo coloca en el búfer de comandos. Luego, cada vez que se ejecute el mismo objeto PreparedStatement, se analizará nuevamente, pero no se compilará nuevamente. Los comandos precompilados se encuentran en el búfer y se pueden reutilizar. En aplicaciones de nivel empresarial con una gran cantidad de usuarios, los mismos comandos SQL a menudo se ejecutan repetidamente. La reducción en la cantidad de compilaciones provocada por el uso de objetos PreparedStatement puede mejorar el rendimiento general de la base de datos. A menos que crear, preparar y ejecutar tareas de PreparedStatement en el lado del cliente lleve más tiempo que las tareas de Declaración, recomendaría usar objetos PreparedStatement en todos los casos, excepto para los comandos SQL dinámicos.
6. Utilice objetos PreparedStatement en el procesamiento por lotes de operaciones repetidas de inserción o actualización <br /> <br /> Si las operaciones de inserción y actualización se procesan en lotes, el tiempo requerido para ellas se puede reducir significativamente. Statement y CallableStatement proporcionados por Oracle realmente no admiten el procesamiento por lotes. Solo el objeto PreparedStatement realmente admite el procesamiento por lotes. Podemos elegir el procesamiento por lotes JDBC estándar utilizando los métodos addBatch() y ejecutarBatch(), o elegir el método propietario de Oracle más rápido utilizando el método setExecuteBatch() del objeto PreparedStatement y el método estándar ejecutarUpdate(). Para utilizar el mecanismo de procesamiento por lotes patentado de Oracle, puede llamar a setExecuteBatch() como se muestra a continuación:
PreparedStatement pstmt3D nulo;
intentar {
((Declaración preparada de Oracle)
pstmt).setExecuteBatch(30);
...
pstmt.executeUpdate();
}