public static<T> T  executeInPrepareStmt(QueryCallBack<T> cb) {
        T result = null;
        PreparedStatement pstmt = null;
        ResultSet rs = null;
        try {
            pstmt = ConnectionUtil.getConnection().prepareStatement(cb.getSql());
            result = cb.doInCallback(pstmt);
            rs = cb.getResultSet();
            if (rs != null) {
                rs.close();
            }
            pstmt.close();
        } catch (SQLException e) {
            logger.error("Meet SQL Exception.");
            logger.error(ExceptionUtils.getStackTrace(e));
            try {
                if (rs != null && !rs.isClosed()) {
                    rs.close();
                }
                if (pstmt != null && !pstmt.isClosed()) {
                    pstmt.close();
                }
            } catch (SQLException e1) {
            }
        }
        return result;
    }