Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Guariento

Qual a melhor maneira de escrever uma grande query SQL no código java?

Recommended Posts

Prezados, qual seria a melhor maneira de se escrever uma grande query SQL dentro do código Java sem ter de ficarmos abrindo e fechando aspas concatenando os pedaços da query? Exemplo:

// monta query
String sql = "SELECT "
		+ "	c.cvCodCdc, "
		+ "	c.ccNomCdc "
		+ "FROM "
		+ "	tblCdc c "
		+ "	LEFT JOIN ( "
		+ "		SELECT "
		+ "			f.cvCodCdc "
		+ "		FROM "
		+ "			tblFuncionario f "
		+ "		WHERE "
		+ "			f.cdDatRes IS NULL "
		+ "		GROUP BY "
		+ "			f.cvCodCdc "
		+ "	) z ON "
		+ "		c.cvCodCdc = z.cvCodCdc "
		+ "WHERE "
		+ "	z.cvCodCdc IS NOT NULL "
		+ "ORDER BY "
		+ "	c.ccNomCdc";

... como podem ver no código acima, só não vale dizer que a resposta é assim: "SELECT c.cvCodCdc, c.ccNomCdc FROM tblCdc c LEFT JOIN ( ....". O interessante é manter as quebras de linha da query para não dificultar a leitura, ao mesmo tempo evitar as várias aspas e concatenações do código Java.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Se você não estiver utilizando um framework ORM, não podendo assim utilizar Criteria, recomendo que separe o SQL do código Java. Crie um arquivo SQL e ponha sua query nele. Cria-se o arquivo SQL dentro do projeto com a query e depois lê o arquivo do seu código Java jogando seu conteúdo numa String.

SELECT * FROM minha_tabela
  INNER JOIN ...
  WHERE xpto = ?

No código Java.

// ..

private String recuperaSql(String arquivo) {
  InputStream stream = MinhaClasse.class.getClassLoader().getResourceAsStream(arquivo);
  if (stream == null) {
    throw new Exception("Não foi possível recuperar o recurso '" + arquivo + "' no sistema.");
  }

  try {
    String sql = IOUtils.toString(stream);
    stream.close();

    return sql;
  } catch (IOException ex) {
    throw new Exception(ex);
  }
}

// ...

String sql = recuperaSql("/caminho/para/o/arquivo/sql");
Connection conn = recuperaConexaoBanco();
PreparedStatement ps = conn.prepareStatement(sql);
ps.setInt(1, parametroConsulta);
ResultSet rs = ps.executeQuery();

// ...

A documentação da biblioteca utilizada para leitura do arquivo SQL pode ser consultada em http://commons.apache.org/proper/commons-io/apidocs/ , porém nem é necessário dizer que tu podes ler o arquivo de qualquer outra maneira que quiser.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.