Example usage for org.springframework.jdbc.core CallableStatementCallback doInCallableStatement

List of usage examples for org.springframework.jdbc.core CallableStatementCallback doInCallableStatement

Introduction

In this page you can find the example usage for org.springframework.jdbc.core CallableStatementCallback doInCallableStatement.

Prototype

@Nullable
T doInCallableStatement(CallableStatement cs) throws SQLException, DataAccessException;

Source Link

Document

Gets called by JdbcTemplate.execute with an active JDBC CallableStatement.

Usage

From source file:cc.tooyoung.common.db.JdbcTemplate.java

public Object execute(CallableStatementCreator csc, CallableStatementCallback action, boolean isWrite)
        throws DataAccessException {

    Assert.notNull(csc, "CallableStatementCreator must not be null");
    Assert.notNull(action, "Callback object must not be null");
    if (ApiLogger.isTraceEnabled()) {
        String sql = getSql(csc);
        ApiLogger.trace("Calling stored procedure" + (sql != null ? " [" + sql + "]" : ""));
    }/*from w  w w.j ava  2  s  . c  o  m*/

    long start = System.currentTimeMillis();
    DataSource ds = getDataSource(isWrite);
    Connection con = safeGetConnection(ds, isWrite);
    CallableStatement cs = null;
    try {
        Connection conToUse = con;
        if (this.nativeJdbcExtractor != null) {
            conToUse = this.nativeJdbcExtractor.getNativeConnection(con);
        }
        cs = csc.createCallableStatement(conToUse);
        applyStatementSettings(ds, cs);
        CallableStatement csToUse = cs;
        if (this.nativeJdbcExtractor != null) {
            csToUse = this.nativeJdbcExtractor.getNativeCallableStatement(cs);
        }
        Object result = action.doInCallableStatement(csToUse);
        handleWarnings(cs);
        return result;
    } catch (Exception ex) {
        // Release Connection early, to avoid potential connection pool deadlock
        // in the case when the exception translator hasn't been initialized yet.
        if (csc instanceof ParameterDisposer) {
            ((ParameterDisposer) csc).cleanupParameters();
        }
        String sql = getSql(csc);
        csc = null;
        JdbcUtils.closeStatement(cs);
        cs = null;
        DataSourceUtils.releaseConnection(con, ds);
        con = null;
        if (ex instanceof SQLException) {
            throw getExceptionTranslator(ds).translate("CallableStatementCallback", sql, (SQLException) ex);
        } else {
            throw new RuntimeException("CallableStatementCallback " + getSql(csc), ex);
        }
    } finally {
        //add slow log
        long useTime = System.currentTimeMillis() - start;
        if (useTime > ApiLogger.DB_FIRE_TIME) {
            ApiLogger.fire(new StringBuffer().append("DB ")
                    .append(((com.mchange.v2.c3p0.ComboPooledDataSource) ds).getJdbcUrl()).append(" too slow :")
                    .append(useTime).append(" isWrite:").append(isWrite));
        }

        if (csc instanceof ParameterDisposer) {
            ((ParameterDisposer) csc).cleanupParameters();
        }
        JdbcUtils.closeStatement(cs);
        DataSourceUtils.releaseConnection(con, ds);

        TimeStatUtil.addElapseTimeStat(resource, isWrite, start, useTime);
    }
}

From source file:org.springframework.jdbc.core.JdbcTemplate.java

public Object execute(CallableStatementCreator csc, CallableStatementCallback action) {
    if (logger.isDebugEnabled()) {
        String sql = getSql(csc);
        logger.debug("Calling stored procedure" + (sql != null ? " [" + sql + "]" : ""));
    }//from w w w.j  a  va  2 s .com
    Connection con = DataSourceUtils.getConnection(getDataSource());
    CallableStatement cs = null;
    try {
        Connection conToUse = con;
        if (this.nativeJdbcExtractor != null
                && this.nativeJdbcExtractor.isNativeConnectionNecessaryForNativeCallableStatements()) {
            conToUse = this.nativeJdbcExtractor.getNativeConnection(con);
        }
        cs = csc.createCallableStatement(conToUse);
        DataSourceUtils.applyTransactionTimeout(cs, getDataSource());
        CallableStatement csToUse = cs;
        if (this.nativeJdbcExtractor != null) {
            csToUse = this.nativeJdbcExtractor.getNativeCallableStatement(cs);
        }
        Object result = action.doInCallableStatement(csToUse);
        SQLWarning warning = cs.getWarnings();
        throwExceptionOnWarningIfNotIgnoringWarnings(warning);
        return result;
    } catch (SQLException ex) {
        throw getExceptionTranslator().translate("executing CallableStatementCallback [" + csc + "]",
                getSql(csc), ex);
    } finally {
        if (csc instanceof ParameterDisposer) {
            ((ParameterDisposer) csc).cleanupParameters();
        }
        JdbcUtils.closeStatement(cs);
        DataSourceUtils.closeConnectionIfNecessary(con, getDataSource());
    }
}