Preciso executar em uma aplicação Java uma SET schema ?
instrução, onde o placeholder é substituído por um valor fornecido em tempo de execução pelo chamador.
Eu assumi que poderia usar PreparedStatement
para superar a potencial injeção de SQL, mas se eu tentar executar uma instrução preparada, recebo uma PSQLException
mensagem com
ERROR: syntax error at or near "$1" Position: 18
Se eu executar o SQL apenas concatenando o nome do esquema fazendo:
public void executeSetSchema(Connection con, String schema){
try{
Statement stmt = con.createStatement();
stmt.execute("SET SCHEMA '" + schema + "'");
} catch(Exception){}
}
Então tudo funciona como esperado.
Claramente, isso acontece com todas as versões mais recentes do PostgreSQL
Por que não posso usar um PreparedStatement e o que devo fazer para evitar a injeção de SQL aqui?