完整sql語句輸出的工具類

weixin_34054866發表於2017-07-11

不多說,上程式碼

/**
 * author zz
 */

public class SQLTool {

    /**
     * 去掉sql中的?號,返回執行的具體sql
     * @param sql
     * @param params
     * @return String
     */
    public String logSQL(String sql, Object[] params) {

        int _paramNum = 0;
        String _backSql = "";
        if (null != params)
            _paramNum = params.length;
        if (1 > _paramNum) {// 1 如果沒有引數,說明是不是動態SQL語句
            _backSql = sql;
        } else {// 2 如果有引數,則是動態SQL語句
            StringBuffer _returnSQL = new StringBuffer();
            String[] _subSQL = sql.split("\\?");
            for (int i = 0; i < _paramNum; i++) {
                if (null != params[i]) {

                    if (params[i] instanceof java.util.Date) {
                        _returnSQL
                                .append(_subSQL[i])
                                .append(" '")
                                .append(this
                                        .util2sql((java.util.Date) params[i]))
                                .append("' ");
                    } else if (params[i] instanceof String) {
                        _returnSQL.append(_subSQL[i]).append(" '")
                                .append(params[i]).append("' ");
                    } else if (params[i] instanceof Integer) {
                        _returnSQL.append(_subSQL[i]).append(" ")
                                .append(params[i]).append(" ");
                    }
                }
            }

            if (_subSQL.length > params.length) {
                _returnSQL.append(_subSQL[_subSQL.length - 1]);
            }
            _backSql = _returnSQL.toString();
        }
        return _backSql;
    }

    /**
     * 轉換時間類  java.util.Date->java.sql.Date
     * @param fechaUtil
     * @return java.sql.Date
     */
    private java.sql.Date util2sql(java.util.Date fechaUtil) {
        java.sql.Date _SQL = new java.sql.Date(fechaUtil.getTime());
        return _SQL;
    }

}

相關文章