Identificar parâmetros em um SQL, JAVA

Boa tarde pessoal, estou desenvolvendo uma aplicação da qual tenho que ler um SQL externo e exibir suas informações, esse SQL pode ser de qualquer tabela do meu banco, com qualquer quantidade de colunas e o principal possuir qualquer quantidade de parâmetros.

Uma das dificuldades é que os parâmetros neste SQL estão da seguinte forma “:qualuqerNome” e não com “?”.

Exemplo de SQL:

String SQL = Select * from tabelaExemplo where codigo = :cod 

Código que executa o SQL.

ResultSet rs = super.executeQuery(SQL);
while(rs.next()){
    System.out.println(rs.getString(1));
}


public ResultSet executeQuery(String SQL, Object...params) throws SQLException {
    PreparedStatement ps = this.getStatement(stringConnection, SQL);
    for (int i=0; i < params.length; i++){
        ps.setObject(i+1, params[i]);
    }
    return (ps.executeQuery());
}

Eu faria algo assim

import java.util.ArrayList;
import java.util.List;

public class QuebraSQL {

	public static void main(String[] args) {
		String sql = "Select * from tabelaExemplo where codigo = :cod AND xyz = :xyz"; // Letra maiúscula apenas para constantes!
		//Separo as partes
	    String[] partOfQuery = sql.toLowerCase().split("where");
	    
	    //Quebro nos espaços e tenho um vetor com várias palavras distintas
	    String[] parameters = partOfQuery[1].split(" ");

	    //Aproveito que cada parâmetro tem um : e só pego o que tem isso
	    List<String> pars = new ArrayList<>();
	    for(String param : parameters) {
	    	if(param.startsWith(":")) {
	    		pars.add(param);
	    	}
	    }
	    
	    //Usando java 8 para apresentar o que foi lido.
	    pars.forEach(p -> {
	    	System.out.println(p);
	    });
	    
	}

}

Edit: Quase esqueci: para usar como eu sugeri, é obrigatório que você tenha espaços. Senão, já era, afinal, se ocorrer isso =:xyz vai rodar, mas o código acima não pega.
Para evitar isso, eu faria só um replace("=:", “= :”)

2 curtidas

Muito obrigado, não foi exatamente o que eu precisava mas me guiou par ao que eu necessitava. Muito obrigado mesmo. Não sei se posso utilizar este mesmo tópico… porem conseguiria me dar uma luz como eu poderia popular uma JTable com o retorno do SQL executado.

Você precisa criar um TableModel customizado, a partir daí, fica bem fácil.

consegui, agredeço muito todo apoio.