对于 Connection/J 8.0.26 及更高版本:如果在服务器上启用了跟踪
        Connector/J 可以接收有关
        服务器跟踪的客户端会话状态更改的信息。通过将 Connector/J 连接属性设置
        trackSessionState为true
        (默认值为false属性)启用信息接收。
      
        启用该功能后,从服务器接收到的有关会话状态更改的信息存储在
        SessionStateChanges对象内,可通过 aServerSessionStateController及其getSessionStateChanges()方法访问:
      
ServerSessionStateChanges ssc =
  MysqlConnection.getServerSessionStateController().getSessionStateChanges();
        InSessionStateChanges是
        SessoinStateChange对象列表,可通过以下
        getSessionStateChangesList()方法访问:
      
List<SessionStateChange> sscList = ssc.getSessionStateChangesList();
        每个SessionStateChange都有字段
        type和values,可通过getType()和
        getValues()方法访问。类型及其对应的值描述如下:
      
表 6.23 SessionStateChange 类型和值
| 类型 | 值列表中的值数 | 价值观 | 
|---|---|---|
| SESSION_TRACK_SYSTEM_VARIABLES | 2个 | 更改的系统变量的名称及其新值 | 
| SESSION_TRACK_SCHEMA | 1个 | 新模式名称 | 
| SESSION_TRACK_STATE_CHANGE | 1个 | “1”或“0” | 
| SESSION_TRACK_GTIDS | 1个 | 服务器报告的 GTID 列表 | 
| SESSION_TRACK_TRANSACTION_CHARACTERISTICS | 1个 | 交易特征声明 | 
| SESSION_TRACK_TRANSACTION_STATE | 1个 | 交易状态记录 | 
        Connector/J 仅从服务器发送的最新 OK 数据包中接收更改。使用
        getSessionStateChanges(),可能会遗漏由 Connector/J 发出的中间查询返回的一些更改。但是,也可以使用 来接收会话状态更改信息
        SessionStateChangesListener,这必须
        ServerSessionStateController使用
        addSessionStateChangesListener()方法注册。下面的例子
        SessionStateChangesListener在一个类中实现,该类也提供了打印变化信息的方法:
      
class SSCListener implements SessionStateChangesListener {
        ServerSessionStateChanges changes = null;
        public void handleSessionStateChanges(ServerSessionStateChanges ch) {
            this.changes = ch;
            for (SessionStateChange change : ch.getSessionStateChangesList()) {
                printChange(change);
            }
        }
        private void printChange(SessionStateChange change) {
            System.out.print(change.getType() + " == > ");
            int pos = 0;
            if (change.getType() == ServerSessionStateController.SESSION_TRACK_SYSTEM_VARIABLES) { 
                // There are two values with this change type, the system variable name and its new value
                System.out.print(change.getValues().get(pos++) + "=");
            }
            System.out.println(change.getValues().get(pos));
        }
    }
SessionStateChangesListener listener = new SSCListener();
MysqlConnection.getServerSessionStateController().addSessionStateChangesListener(listener);
        使用已注册的
        SessionStateChangesListener,用户可以访问所有中间结果,但侦听器可能会减慢查询结果的传递速度。这是因为在 OK 数据包被 Connector/J 消费后,在ResultSet构建之前立即调用侦听器。