2010-04-08 18 views
5

Una pregunta simple: ¿cuál es la forma más eficiente de acceder a una base de datos en Java/JDBC? Soy un desarrollador web y me gustaría escribir algún código reutilizable y escalable.
Lo que es interesante para mí es el uso de herramientas como ResultSupport: ¿es demasiado expansiva en términos de uso de recursos?
¿Qué puede sugerir?Estrategia de Java eficiente para acceder a una base de datos

Respuesta

5

No sólo JDBC específica, sólo cosas generales SQL

  1. Si tiene que volver a ejecutar una consulta varias veces, utilice PreparedStatement. Use el procedimiento almacenado si está disponible. Esto obviamente no es portátil así que YMMV.

  2. Cierre siempre su ResultSet o Statement si no lo está utilizando. El cierre de una Declaración cerrará automáticamente todos los ResultSet asociados con la Declaración. Aún así, es una buena costumbre cerrar el ResultSet.

  3. Intenta restringir lo que se puede consultar, p. Ej. selecciona * de las órdenes donde order_date entre XXX y yyy. En MySQL, la consulta puede ser un escaneo de tabla completo o 'rango' dependiendo de la cantidad de datos que se devuelve. Decidiendo qué tan 'flexible' quiere que sus consultas sean

  4. Si está utilizando MySQL, utilice la función de explicar para optimizar su consulta. Si está utilizando JPA, entonces no puede ver el SQL generado. (Esto no es estrictamente JDBC) Es posible que desee habilitar el inicio de sesión en el administrador ORM para visualizar la instrucción SQL utilizada. Luego usa explicar para optimizar eso.Es posible que desee utilizar @NamedNativeQuery si el ORM genera una consulta muy enrevesado

  5. Si el controlador JDBC soporta actualización por lotes a continuación, utilizar eso. Las actualizaciones por lotes se admiten en PreparedStatement y ResultSet.

  6. También puede controlar la confirmación. Es una buena idea apagarlo si realiza muchas actualizaciones. La llamada commit() usted mismo.

-1

Creo que la forma más fácil y más común es usar Spring y su JDBCTemplate.

El mejor enfoque probablemente dependa de la pila que esté utilizando para crear su aplicación web. Si comienzas de nuevo, Spring es un buen camino por recorrer.

+0

Y para la escalabilidad, utilice un 'DataSource' agrupado buscado desde JNDI. – gustafc

0

Es muy importante usar siempre un grupo de conexión DataSource como c3p0.

0

Hay un proyecto que asigna objetos Java a las bases de datos mysql. Azirt.

0

Uso agrupación de conexiones (ya sea el de su contenedor o una agrupación de conexiones independiente como c3p0 o DBCP) y algo así como DBUtils o primavera de JdbcTemplate.

1

La mejor respuesta a esta sencilla pregunta es: "depende".

Hay muchas API que puede usar para acceder a la base de datos. Casi todos usarán la API JDBC como medio para comunicarse con la base de datos. Entonces, en teoría, nada puede vencer al bajo nivel de JDBC (al igual que el código de máquina es, en teoría, siempre más rápido que los lenguajes de programación de más alto nivel).

Pero como también le gusta escribir código reutilizable, le sugiero que busque en JPA. Es el estándar de Java para la persistencia de objetos en bases de datos relacionales. Su rendimiento es bastante bueno y es muy portátil.

Como JPA es solo una especificación, puede elegir su propia implementación: Hibernate, OpenJPA o cualquier servidor compatible con Java EE.

Cuestiones relacionadas