Протоколирование подготовленного sql-запроса в groovy

#java #sql #groovy

#java #sql #groovy

Вопрос:

Мне нужно протоколировать мои подготовленные sql-запросы в groovy.

Чтобы избежать внедрения sql и иметь автоматические строковые кавычки (это важно), я использовал этот дизайн:

 String name = "Bobby"
Integer status = 1    
def query = 'UPDATE my_tbl SET status=? WHERE name=?';
sql.execute (query, [status, name])
  

Как я могу получить подготовленный sql-запрос с моими параметрами?
Могут быть другие решения?

Ответ №1:

Я предполагаю, что вы хотите сделать, это записать строку запроса с ? параметрами, замененными их значениями? Я не знаю, как это сделать в журналах приложений, но в вашей базе данных, вероятно, есть журнал запросов, который может это показать.

Если вы используете перегруженную версию execute , вы можете достичь чего-то очень близкого к тому, о чем вы просите

 Map params [status: 1, name: "Bobby"    
def query = 'UPDATE my_tbl SET status=? WHERE name=?';
log.debug "query: $query, params: $params"
sql.execute(params, query)
  

Комментарии:

1. Да, вы правильно меня поняли. Но в приложении я могу разделять журналы по файлам в области приложения с одним вызовом. В журналах базы данных a не может этого сделать. Я думаю, что решение одно — создать перегруженный класс. Спасибо!