tabla - mostrar datos en un combobox java mysql
¿Dónde debo colocar los archivos SQL en mi proyecto Java? (5)
Tengo un proyecto Java que incluirá una serie de declaraciones SQL grandes para consultar la base de datos. Mi pregunta es: ¿dónde debo guardarlos?
Estoy bastante seguro de que quiero que cada declaración tenga su propio archivo de texto administrado por el control del código fuente. Como Java no admite cadenas de líneas múltiples, no puedo colocar fácilmente el SQL en mis archivos .java
y no creo que quiera hacerlo de todos modos. En el momento de la compilación, puedo colocar estos archivos de texto en JAR y obtener el contenido con ClassLoader.getResourceAsStream()
.
Así que mi problema se convierte en qué directorios debo poner estos archivos y cómo debo llamarlos. Lo ideal es que la gente diga desde el archivo .sql
qué clase de Java lo usa. Lo que definitivamente no quiero es un solo directorio lleno de muchos archivos llamados cosas como report1.sql
y report3.sql
y así sucesivamente.
Mi inclinación es ponerlos en el directorio del paquete con todos los archivos .java
, pero tengo un colega que no le gusta tener nada más que los archivos .java
en este árbol. Por lo tanto, esto conduce a la alternativa de una estructura de directorios separada que refleja los paquetes de Java, pero esto parece una sobrecarga innecesaria.
Por lo tanto, me gustaría escuchar lo que haces con tus archivos SQL.
Estamos usando Netbeans 6.5 en caso de que eso afecte sus respuestas.
( Esta pregunta es similar pero, lamentablemente, las respuestas son muy específicas de C #, lo que es bueno para esa pregunta pero malo para mí).
En una configuración de Java / Maven usamos como jerarquía de proyectos:
project/src/main/java/Package/Class.java
project/src/test/java/Package/ClassTest.java
project/src/main/resources/Package/resource.properties
project/src/test/resources/Package/test_resource.properties
Y para responder a su pregunta: pondría los archivos SQL junto con los recursos en src / main / resources.
Es posible que desee echar un vistazo a este thread .
Estaría tentado de poner las consultas SQL en una carpeta de SQL
dedicada bajo src. Esto separa el código de Java del SQL:
+ src
+ java
+ sql
- Package/Class.sql
+ test
Alternativamente, puede colocarlos en archivos de propiedades simples usando la estructura anterior:
getUserByName = select * from users where name=?
getUserByEmail = select * from users where email=?
getUserByLongQuery = select * from users where email=? /
and something = ? /
where something_else = ?
Además, creo que vale la pena mencionar que puedes poner cadenas de varias líneas en una clase de Java si prefieres tomar esa ruta:
class MyClass {
MY_QUERY = "select * from users where email = ? " +
"and something_else = ?";
}
Este es un pequeño riff en la pregunta inicial, pero posiblemente más complejo sea el SQL cuanto más pertenece a la base de datos (o en una capa de servicios) y no en su código Java.
De lo contrario, a medida que el código madura, surgen problemas como este .
Estoy totalmente de acuerdo con boutta. Maven establece un buen estándar para la gestión de carpetas src. ¿Has considerado almacenar tu SQL en XML? Mantener las consultas en un solo archivo puede facilitar la administración del SQL. Mi primera intuición es algo simple:
<?xml version="1.0" encoding="UTF-8"?>
<queries>
<query id="getUserByName">
select * from users where name=?
</query>
<query id="getUserByEmail">
select * from users where email=?
</query>
</queries>
Para analizar el archivo, use xpath o incluso SAX para crear un mapa de consultas con clave por el id para búsquedas rápidas de consultas.
Para ser coherente con http://maven.apache.org/pom.html#Resources este lugar puede ser uno de los siguientes:
-
src/main/sql
-
src/main/upgrade
- para scripts de actualización entre versiones -
src/main/db
,src/main/schema
,src/main/ddl
- para el esquema de base de datos del proyecto actual, para la implementación inicial del proyecto - etc, simplemente póngalo en el directorio
src/main/NAME
Otras cosas a considerar:
- La herramienta de migración de la base de datos FlyWay asume que los scripts
Vxx__YYY.sql
encuentran enclasspath:resources/db/migration
para que losVxx__YYY.sql
en el directorio de proyectossrc/main/resources/db/migration
. - La herramienta de migración LiquiBase DB recomienda elegir un paquete en su ruta de clase para almacenar los registros de cambios, preferiblemente cerca de sus clases de acceso a la base de datos
Tenga en cuenta que IDE no admite directorios de escucha que no sean src/main/java
y src/main/resources
en el visor de proyectos , para eso use el visor de archivos .