/** * */ package ru.test.app.web; import java.sql.ResultSet; import java.sql.ResultSetMetaData; import ru.funsys.avalanche.Application; import ru.funsys.avalanche.Messages; import ru.funsys.avalanche.annotation.CfgAttribute; import ru.funsys.avalanche.sql.Adapter; import ru.funsys.util.Utils; /** * Класс выполнения SQL запросов */ public class WebApp extends Application { @CfgAttribute(description = "Адаптер БД") Adapter database; @Override public void init() { } @Override public void done() { } public String execute(String sql) { String result = null; if (sql != null) { String temp = sql.trim().toLowerCase(); try { if (temp.startsWith("select") || temp.startsWith("with")) { ResultSet resultSet = database.select(sql); result = getTable(resultSet); } else { int count = database.execute(sql); result = "
" + Messages.getMessage("WEB0001I", new Object[] {count}) + "
"; } } catch (Exception e) { result = error("WEB0002E") + "
" + Utils.printStackTrace(e) + "
"; } } return result; } /** * Форматирование результата выполнения SQL запроса в HTML таблицу * * @param resultSet результат выполнения запроса * * @return HTML таблица */ public String getTable(ResultSet resultSet) throws Exception { StringBuilder builder = new StringBuilder(); ResultSetMetaData metadata = resultSet.getMetaData(); if (metadata != null) { builder.append("").append("\r\n"); int count = metadata.getColumnCount(); builder.append(""); for (int index = 0; index < count; ) { index++; builder.append(""); } builder.append("").append("\r\n"); while (resultSet.next()) { builder.append(""); for (int index = 0; index < count; ) { index++; builder.append(""); } builder.append("").append("\r\n"); } builder.append("
").append(metadata.getColumnName(index)).append("
").append(resultSet.getObject(index)).append("
"); } return builder.toString(); } /** * Выполнение тестового запроса к БД * * @return результат выполнения запроса * * @throws Exception воозможную ошибку */ public ResultSet execute() throws Exception { String sql = getParameterValue("sql"); if (sql == null) { String error = error("WEB0004E", "sql", getNodeName(), getName()); throw new NullPointerException(error); } return database.select(sql); } }