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 controladores ligeros 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 de los cuales se utilizan para software de cliente, como software de aplicación, subprogramas y servlets, y los otros dos se utilizan para. Software de cliente, como software de aplicación, subprogramas y servlets. Software del lado del servidor, como procedimientos almacenados Java en bases 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.
Al establecer una conexión con la base de datos por primera vez, la conexión está en modo de envío automático 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, de la siguiente manera:
conn.setAutoCommit
(false);
, necesitamos administrar manualmente la transacción llamando a los métodos commit() y rollback() de la clase Connection.
3. Utilice objetos Statement en SQL dinámico o comandos de tiempo limitado
. Al ejecutar comandos SQL, tenemos dos opciones: puede utilizar objetos PreparedStatement o 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 la función auxiliar 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 realizar estas tareas 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 mediante 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 utilizan objetos PreparedStatement para ejecutar comandos SQL, la base de datos analiza y compila los comandos y luego los 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 para procesar operaciones de inserción o actualización repetidas en lotes.
Si procesa operaciones de inserción y actualización en lotes, puede reducir significativamente el tiempo que requieren. 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 propietario de Oracle, puede llamar a setExecuteBatch() de la siguiente manera:
PreparedStatement pstmt3D null;
try {
((OraclePreparedStatement)
pstmt).setExecuteBatch(30
...
pstmt.executeUpdate()
}
El valor especificado al llamar a setExecuteBatch; () es un límite superior cuando se alcanza este valor, la ejecución del comando SQL se activará automáticamente y el método estándar ejecutarUpdate() se enviará a la base de datos como un proceso por lotes. Podemos transferir tareas por lotes en cualquier momento llamando al método sendBatch() de la clase PreparedStatement.
7. Utilice el método de localización de Oracle para insertar y actualizar objetos grandes (LOB).
La clase PreparedStatement de Oracle no admite completamente el procesamiento de objetos grandes como BLOB y CLOB. En particular, el controlador Thin no admite la configuración mediante setObject(). y los métodos setBinaryStream() del objeto PreparedStatement. El valor de BLOB no admite la configuración del valor de CLOB utilizando el método setCharacterStream(). Solo los métodos en el localizador pueden obtener valores de tipo LOB de la base de datos. Puede utilizar objetos PreparedStatement para insertar o actualizar LOB, pero necesita utilizar un localizador para obtener el valor del LOB. Debido a estos dos problemas, recomiendo utilizar el método del localizador para insertar, actualizar u obtener valores LOB.
8. Utilice la sintaxis SQL92 para llamar a procedimientos almacenados
. Al llamar a procedimientos almacenados, podemos usar SQL92 u Oracle PL/SQL. No hay beneficios prácticos al usar Oracle PL/SQL y traerá problemas a los desarrolladores que mantendrán su aplicación. en el futuro habrá problemas, por lo tanto, recomiendo usar SQL92 al llamar a procedimientos almacenados.
9. Utilice Object SQL para transferir el esquema de objetos a la base de datos.
Dado que la base de datos de Oracle se puede utilizar como una base de datos orientada a objetos, puede considerar transferir el esquema orientado a objetos de la aplicación a la base de datos. El enfoque actual es crear beans Java como objetos de base de datos disfrazados, asignar sus propiedades a tablas relacionales y luego agregar métodos a estos beans. Aunque no hay ningún problema en hacer esto en Java, debido a que las operaciones se realizan fuera de la base de datos, otro software de aplicación que accede a la base de datos no puede aprovechar el modelo de objetos. Si aprovecha la tecnología orientada a objetos de Oracle, puede simular sus datos y operaciones en la base de datos creando un nuevo tipo de objeto de base de datos y luego usar herramientas como JPublisher para generar sus propias clases de bean Java. Si usa este método, no solo las aplicaciones Java pueden usar el modelo de objetos del software de la aplicación, sino que otro software de aplicación que necesita compartir los datos y operaciones en su aplicación también puede usar el modelo de objetos del software de la aplicación.
10. Utilice SQL para completar operaciones en la base de datos.
La experiencia más importante que quiero presentarles es hacer un uso completo del enfoque orientado a conjuntos de SQL para resolver las necesidades de procesamiento de bases de datos, en lugar de utilizar lenguajes de programación de procedimientos como Java.
Si el programador buscara muchas filas en una tabla, cada fila del resultado buscaría datos en otras tablas. Finalmente, el programador creó comandos ACTUALIZAR separados para actualizar los datos de la primera tabla en lotes. Se puede realizar una tarea similar a esta en un comando ACTUALIZAR utilizando una subconsulta de varias columnas en la cláusula set. ¿Por qué dejar que los datos fluyan por Internet cuando se puede realizar la tarea con un único comando SQL? Recomiendo que los usuarios aprendan detenidamente cómo maximizar el poder de SQL.
Autor: picva Fuente: CCID Technology Community