JDBC: string de SQL grande de mais para usar aspas e '+'

6 respostas
L

Olá pessoal!

Não sei onde perguntar sobre isso, por isso postei aqui.

tenho a seguinte string sql para JDBC:

SELECT 
escola.id as idescola, 
escola.nome as nomeescola, 
pessoa.id as idpessoa, 
pessoa.nome as nomepessoa, 
usuario.tipo_usuario as tipousuario
FROM escola 
inner join usuario
on escola.id=usuario.fk_escola 
inner join pessoas
on usuario.fk_pessoa=pessoa.id

para colocar quebras de linha no codigo java é necessário fazer isso:

"SELECT "
+"escola.id as idescola, "
+"escola.nome as nomeescola, "
+"pessoa.id as idpessoa, "
+"pessoa.nome as nomepessoa, "
+"usuario.tipo_usuario as tipousuario"
+"FROM escola "
+"inner join usuario"
+"on escola.id=usuario.fk_escola "
+"inner join pessoas"
+"on usuario.fk_pessoa=pessoa.id"

Existe alguma forma pra não precisar ficar adicionando aspas e ‘+’ ?
isso facilitaria alguns testes que tenho que realizar.

6 Respostas

E

Java não é C#, você tem de usar as aspas mesmo. Sorry …

Como você deve saber, em C# é possível você usar a seguinte sintaxe:

string sql = @"
    SELECT   
    escola.id as idescola,   
    escola.nome as nomeescola,   
    pessoa.id as idpessoa,   
    pessoa.nome as nomepessoa,   
    usuario.tipo_usuario as tipousuario  
    FROM escola   
    inner join usuario  
    on escola.id=usuario.fk_escola   
    inner join pessoas  
    on usuario.fk_pessoa=pessoa.id  
";

Isso foi sugerido no Java ( http://mail.openjdk.java.net/pipermail/coin-dev/2009-February/000034.html ) mas não foi aceito ( https://blogs.oracle.com/darcy/entry/project_coin_final_five )

Alternativamente, você pode tentar ler as strings de um arquivo-texto.

L

entanglement:
Java não é C#, você tem de usar as aspas mesmo. Sorry …

Isso foi sugerido no Java ( http://mail.openjdk.java.net/pipermail/coin-dev/2009-February/000034.html ) mas não foi aceito ( https://blogs.oracle.com/darcy/entry/project_coin_final_five )

Alternativamente, você pode tentar ler as strings de um arquivo-texto.

Obrigado entanglement.

Eu tinha visto C# (com arroba) e python (com aspas triplas).
fazia muito tempo que procurava uma forma de fazer isso com Java e ontem dediquei o dia a buscar uma forma.
Eu não sei pq ainda insisto em Java…
Encontrei algumas gambiarras e pensei que alguém pudesse ter inventado outras melhores.

Olha a função S() nesse post:


C

Olá,

Em uma situação onde você é forçado a usar JDBC “na unha”, eu colocaria as queries dentro de um arquivo XML. Existem APIs boas e simples para isso como JaxB. Faça algo assim:

<xml ...>
     <consultas> 
           <query name="buscarClientes">
                <sql>
                     select ...
                </sql>
           </query>

           <query name="buscarProdutos">
                <sql>
                     select ...
                </sql>
           </query>
     
     </consultas>

Depois crie as classes que mapeiam os elementos query e consultas, usando as anotações do JaxB. Mantenha as instâncias da classe na memória durante todo o ciclo de vida da aplicação, para eliminar o gargalo de conversão xml/objeto, e pronto.

E

Se você precisa de algo semelhante a isso frequentemente, crie um programa onde você cola o código SQL (talvez de um ambiente qualquer como o SQL Developer) e, ao apertar um botão, joga o código SQL já com as aspas (duplicadas se for o caso, escapadas etc.) na Área de Transferência (clipboard).
Eu gosto muito de escrever programinhas que fazem exatamente isso porque não preciso escrever um plugin para o meu ambiente de trabalho (Eclipse? Visual Studio? Notepad? vi? sei lá).

Note que o problema é sempre mais chato que parece, porque fora pôr as aspas no começo e no fim de cada linha, e pôr espaços adicionais se for o caso, você também precisa duplicar aspas e outras coisas chatas.

E

cara aqui na empresa um piá fez um programinha para formatar isso, eu ja fiz muitos relatórios com 400 linhas de sql kkkkkkkk, verdade
faça um programa pra vc tb, é simples

crie um jtextarea pra receber o valor em swing
no codigo vá adicionando os append e parando quando chegar no enter, meia hora vc faz, vai ficar assim

StringBuilder query = new StringBuilder(); query.append(" select pr.cod_produto , \n");

L

entanglement:
Se você precisa de algo semelhante a isso frequentemente, crie um programa onde você cola o código SQL (talvez de um ambiente qualquer como o SQL Developer) e, ao apertar um botão, joga o código SQL já com as aspas (duplicadas se for o caso, escapadas etc.) na Área de Transferência (clipboard).
Eu gosto muito de escrever programinhas que fazem exatamente isso porque não preciso escrever um plugin para o meu ambiente de trabalho (Eclipse? Visual Studio? Notepad? vi? sei lá).

Note que o problema é sempre mais chato que parece, porque fora pôr as aspas no começo e no fim de cada linha, e pôr espaços adicionais se for o caso, você também precisa duplicar aspas e outras coisas chatas.

Eu tava fazendo algo parecido com vc.
eu pegava a string do fonte, jogava no javascript pra tirar as aspas e mais, copiava e colava no executor de comandos sql.
quando o sql ficava como quero, colava no javascript pra fazer o inverso e colava novamente no fonte.
Por isso, a solução do CarlosEduardoDantas parece mais prática e não depende de nada fora do projeto.
Mesmo assim, agradeço muito a sugestão. Vou continuar acompanhando o tópico. Talvez surjam outras idéias.

Criado 29 de julho de 2013
Ultima resposta 30 de jul. de 2013
Respostas 6
Participantes 4