Java tutorial
/* * Este programa es software libre; usted puede redistribuirlo y/o modificarlo bajo los trminos * de la licencia "GNU General Public License" publicada por la Fundacin "Free Software Foundation". * Este programa se distribuye con la esperanza de que pueda ser til, pero SIN NINGUNA GARANTIA; * vea la licencia "GNU General Public License" para obtener cursor informacion. */ package ips1ap101.lib.core.db.util; import java.sql.SQLException; import ips1ap101.lib.core.app.Bitacora; import ips1ap101.lib.core.enumeration.EnumTipoResultadoSQL; import org.apache.commons.lang.StringUtils; /** * @author Jorge Campins */ public class InterpreteSqlSQLServer extends InterpreteSqlAbstracto { // <editor-fold defaultstate="collapsed" desc="constantes protegidas"> private static final String LIKE = " ILIKE "; private static final String NOT_LIKE = " NOT ILIKE "; @Override protected String getLike() { return LIKE; } @Override protected String getNotLike() { return NOT_LIKE; } // </editor-fold> private static final String COMANDO_SELECT_1 = "SELECT"; private static final String COMANDO_SELECT_2 = "SELECT TOP"; /* para funciones que retornan tipos basicos */ private static final String COMANDO_EXECUTE_1 = "SELECT dbo."; /* para funciones que retornan tipos compuestos (records, rows, sets, ...) */ private static final String COMANDO_EXECUTE_2 = "SELECT dbo."; private void stamp() { Bitacora.stamp(this); } InterpreteSqlSQLServer() { stamp(); } @Override public String getComandoSelect(String comando, int limite) { String select = super.getComandoSelect(comando, limite); if (select != null && limite > 0) { boolean b1 = StringUtils.startsWithIgnoreCase(select, COMANDO_SELECT_1); boolean b2 = StringUtils.startsWithIgnoreCase(select, COMANDO_SELECT_2); if (b1 && !b2) { select = StringUtils.replaceOnce(select, COMANDO_SELECT_1, COMANDO_SELECT_2 + " " + limite); } } return select; } @Override public String getComandoExecute(String comando, int argumentos) { return this.getComandoExecute(comando, argumentos, EnumTipoResultadoSQL.VOID); } @Override public String getComandoExecute(String comando, int argumentos, EnumTipoResultadoSQL tipoResultado) { boolean retornaResultadoCompuesto = EnumTipoResultadoSQL.COMPOUND.equals(tipoResultado); String execute = StringUtils.stripToNull(comando); String command = retornaResultadoCompuesto ? COMANDO_EXECUTE_2 : COMANDO_EXECUTE_1; if (execute != null) { String[] token = StringUtils.split(execute); String parametros = "()"; if (argumentos > 0) { parametros = ""; for (int i = 0; i < argumentos; i++, parametros += ",?") { } parametros = "(" + parametros.substring(1) + ")"; } if (!token[0].equalsIgnoreCase(COMANDO_EXECUTE_1)) { execute = command + " " + execute; } if (!execute.endsWith(parametros) && !execute.endsWith(";")) { execute += parametros; } } Bitacora.trace(execute); return execute; } @Override public boolean isCommandIgnoredException(SQLException sqle) { boolean is = false; if (sqle != null) { String token1 = "current transaction is aborted"; String token2 = "commands ignored until end of transaction block"; is = sqle.getMessage().contains(token1) && sqle.getMessage().contains(token2); } return is; } @Override public boolean isNotNullConstraintViolation(SQLException sqle) { boolean is = false; if (sqle != null) { String token1 = "null value in column"; String token2 = "violates not-null constraint"; is = sqle.getMessage().contains(token1) && sqle.getMessage().contains(token2); } return is; } @Override public String getNotNullConstraintViolationColumn(SQLException sqle) { String column = null; boolean is = this.isNotNullConstraintViolation(sqle); if (is) { String[] token = sqle.getMessage().split("\""); if (token.length > 2) { column = token[1]; } } return column; } }