Как сгенерировать данные времени выполнения, используя определения GString, хранящиеся в БД
Привет, как я могу использовать хранящиеся в базе данных определения GString для динамически генерируемых данных. Я смог использовать GString для выбора и выбора атрибутов строки, если формат определен в коде
code_format = "${-> row.ACCOUNT} ${-> row.ACCOUNT_OWNER}"
Однако, если то же самое определение извлечено из базы данных, мой код не работает.
Sql sql = Sql.newInstance(url, login, password, driver);
sql.eachRow(SQL) { row ->
code_format = "${-> row.ACCOUNT} ${-> row.ACCOUNT_OWNER}"
database_format = "${-> row.REPORT_ATTRIBUTES}"
println "1- " + code_format
println "2- " + database_format
println "CODE : " + code_format.dump()
println "DB : " + database_format.dump()
}
Когда я запускаю этот код, я получаю следующий вывод;
1- FlowerHouse Joe
2- ${-> row.ACCOUNT} ${-> row.ACCOUNT_OWNER}
CODE : <org.codehaus.groovy.runtime.GStringImpl@463cf024 strings=[, , ] values=[GString$_run_closure1_closure2@44f289ee, GString$_run_closure1_closure3@f3d8b9f]>
DB : org.codehaus.groovy.runtime.GStringImpl@4f5e9da9 strings=[, ] values=[GString$_run_closure1_closure4@11997b8a]
1 ответ
row.REPORT_ATTRIBUTES возвращает String, потому что база данных не знает формат стринговых строк.
GString - шаблон, который может быть создан из строки.
Так что вы можете сделать что-то вроде:
def engine = new groovy.text.SimpleTemplateEngine()
println engine.createTemplate(row.REPORT_ATTRIBUTES).make([row:row]).toString()