<T> T execute(String sql, int fetchSize, boolean returnKeys, PreparedStatementCallback<T> action, Object... args) {
		// 创建Connection
		Connection con = JdbcUtils.getConnection(dataSource);
		PreparedStatement ps = null;
		try {
			// 创建PreparedStatement
			ps = JdbcUtils.createPreparedStatement(con, sql, returnKeys, args);

			if (fetchSize > 0) {
				ps.setFetchSize(fetchSize);
			}
			// 执行PreparedStatement
			T result = action.doInPreparedStatement(ps);
			return result;
		} catch (SQLException ex) {
			JdbcUtils.closeStatement(ps);
			ps = null;
			JdbcUtils.releaseConnection(con);
			con = null;
			throw new JdbcDataAccessException(ex);
		} finally {
			JdbcUtils.closeStatement(ps);
			JdbcUtils.releaseConnection(con);
		}
	}