2010-07-31 14 views
6

Tengo una cadena muy larga que incluye muchas líneas nuevas (es una declaración de SQL realmente larga).¿Cuál es el equivalente de Java del operador qq de Perl?

El SQL es más fácil de leer cuando lo rompo con líneas nuevas. Pero de vez en cuando, necesito copiar el enunciado sql del código para pegarlo en el desarrollador sql.

En Perl, siempre me ha gustado el operador qq, que se puede utilizar en lugar de comillas dobles:

Se usa algo como esto:

$myString = qq{  
         SELECT * 
         FROM table_a a 
         JOIN table_b b ON a.id = b.id ... etc 
       }; 

¿Hay un equivalente en JAVA? Me resulta incómodo tener que romper la cadena en trozos como esto:

String myString = " SELECT * " + 
        " FROM table_a a " + 
        " JOIN table_b b ON a.id = b.id ... etc "; 

y es difícil de copiar la instrucción SQL de código. Termino teniendo que eliminar todas las citas y + '

¿Hay un equivalente de Java? ¿O hay un truco mejor para colocar sentencias SQL legibles y copiables en el código de Java?

+9

Perl permite líneas nuevas en cadenas entre comillas. El propósito de 'q' y' qq' es proporcionar delimitadores alternativos para que no tenga que hacer una barra invertida en sus comillas. – friedo

Respuesta

5

multilínea cadenas en Java

¿Hay un equivalente en Java?

En el momento de la redacción, no lo creo. Sin embargo, hay una propuesta para incluir cadenas de varias líneas en Java.


O hay una mejor truco para poner sentencias SQL legibles, copia-poder en código Java?

Poner los parámetros en consultas de SQL mediante concatenación no es una muy buena idea. Hay clases y API para ayudarlo a formular consultas.

"Envolturas de la consulta"

envolturas pueden mejorar la legibilidad, por ejemplo, en JDOQL (JDO), puede crear una consulta utilizando setWhere(), setLimit(), etc. setDistinct()

Query q = pm.newQuery (...); 
q.setWhere(...); 
q.setRange (...); 
q.setOrdering (...); 
q.setLimit(...); 
q.newParameter(...); // declare a query parameter 

q.execute(34.5); // execute the SQL query with a parameter 

Para JPA , puedes leer JPQL.

si está utilizando JDBC normal, también puede echar un vistazo a PreparedStatement.

+0

O utilice las herramientas de 2010 y use un marco de mapeo de objetos – TheLQ

+1

Ese * es * para lo que son especificaciones como JPA y JDO. – bakkal

+0

Gracias, esperaba algo que me hiciera la vida un poco más fácil. Uso PreparedStatement ahora y reemplazo los "?" S con parámetros. Siempre puedo salir de System.output SQL si necesito copiarlo y pegarlo en un buscador Query –

3

No hay equivalente. La alternativa es poner el SQL en un archivo de propiedades y leer en el archivo de propiedades usando el objeto Properties.

Aún tiene las barras diagonales inversas, pero no tanto como todas las comillas.

SELECT * \ 
FROM table_a a \ 
JOIN table_b b ON a.id = b.id \ 
0

a veces escribir una función como

public static String cat(String ... lines) { } 

la que concatena las líneas y añade nuevas líneas. Si las cadenas se conocen en tiempo de compilación, esto es ineficiente.

En el caso de SQL, estoy de acuerdo con Bakkal: use una biblioteca de embalaje. Empire-db es genial. http://incubator.apache.org/empire-db/

No estoy de acuerdo con la sugerencia de utilizar un marco O/R.

0

No existe en este momento. El soporte de múltiples líneas fue discutido en Java 7, pero se eliminó bastante temprano.

Lo que hago

  1. me uno a todas las líneas primera y luego ponerlos entre comillas. Si el cursor en un editor como Eclipse está dentro de la Cadena y pulsa la tecla Enter Eclipse, el IDE dividirá la Cadena por usted. Entonces obtendrás un montón de secuencias "incómodas" "line1" + "line2" ...

  2. Escribí un analizador para escanear direcciones. Mientras probaba, tuve el mismo problema porque las líneas de dirección son por naturaleza de varias líneas. Así que cambié a Groovy para mis casos de prueba porque Groovy ofrece cadenas de varias líneas y mucho más: http://groovy.codehaus.org/Strings+and+GString.

0

Esto es lo que yo uso - que funciona bastante bien para mí (He de dejar que primero comentario tal cual para los demás)

// Tip: UltraEdit column-copy mode (alt-c) gets the SQL without quotes 
String sql = 
    "select           " + 
    //-- comment here 
    "big-long-query goes here...      " + 
    "last line          ".replaceAll("\\s+", " "); 

Así que usted tiene que tener un IDE o en otro editor (Alguien sabe si Eclipse hace esto?) Que tiene un modo de resaltado de columnas antes de copiar/pegar en su herramienta SQL.

Cuestiones relacionadas