Java equivalente para mysql_real_escape_string () do PHP

Existe um equivalente Java para o mysql_real_escape_string () do PHP?

Isso é para evitar tentativas de injeção de SQL antes de passá-las para Statement.execute ().

Eu sei que posso usar PreparedStatement em vez disso, mas vamos supor que estas são instruções de um tiro, então prepará-las resultará emmenor desempenho. Eu já mudei o código para usar o PreparedStatement mas, dada a maneira como o código existente foi estruturado, uma função escape () tornaria as mudanças no código muito mais simples de revisar e manter; Eu prefiro fácil manter o código, a menos que haja uma razão convincente para a complexidade extra. As PreparedStatements também são tratadas de maneira diferente pelo banco de dados, o que pode nos expor a erros no banco de dados que não encontramos antes, exigindo mais testes antes de liberar a produção.

Apache StringEscapeUtils escapeSQL () escapa apenas aspas simples.

Postscript: Há muitas sutilezas no ambiente que herdei que deliberadamente evitei na minha pergunta.

Dois pontos a considerar:

1) Declarações preparadas não são uma panacéia e não fornecem 100% de proteção contra injeção de SQL. Alguns drivers de banco de dados instanciam consultas parametrizadas usando concatenação de cadeia de caracteres insegura, em vez de pré-compilar a consulta em um formulário binário. Além disso, se o seu SQL depender de procedimentos armazenados, você precisará garantir que os procedimentos armazenados não criem consultas de maneira insegura.

2) A implementação da instrução mais preparada vincula a instrução à conexão do banco de dados em que a instrução foi instanciada. Se você estiver usando o pool de conexões de banco de dados, precisará
use a referência de instrução preparada apenas com a conexão em que foi preparada. Alguns mecanismos de pooling implementam isso de maneira transparente. Caso contrário, você também poderia agrupar as instruções preparadas ou (mais simples, mas mais sobrecarga) criar uma nova instrução preparada para cada consulta.

questionAnswers(6)

yourAnswerToTheQuestion