code: public Db tx(TransactionLevel transactionLevel, VoidFunc1<Db> func) throws SQLException {
  		final Connection conn = getConnection();
  
  		// 检查是否支持事务
  		checkTransactionSupported(conn);
  
  		// 设置事务级别
  		if (null != transactionLevel) {
  			final int level = transactionLevel.getLevel();
  			if (conn.getTransactionIsolation() < level) {
  				// 用户定义的事务级别如果比默认级别更严格，则按照严格的级别进行
  				conn.setTransactionIsolation(level);
  			}
  		}
  
  		// 开始事务
  		boolean autoCommit = conn.getAutoCommit();
  		if (autoCommit) {
  			conn.setAutoCommit(false);
  		}
  
  		// 执行事务
  		try {
  			func.call(this);
  			// 提交
  			conn.commit();
  		} catch (Throwable e) {
  			quietRollback(conn);
  			throw (e instanceof SQLException) ? (SQLException) e : new SQLException(e);
  		} finally {
  			// 还原事务状态
  			quietSetAutoCommit(conn, autoCommit);
  			// 关闭连接或将连接归还连接池
  			closeConnection(conn);
  		}
  
  		return this;
  	}
docs: 执行事务<br>
  在同一事务中，所有对数据库操作都是原子的，同时提交或者同时回滚
  
  @param transactionLevel 事务级别枚举，null表示使用JDBC默认事务
  @param func 事务函数，所有操作应在同一函数下执行，确保在同一事务中
  @return this
  @throws SQLException SQL异常