2

Connection オブジェクトで JDBC 接続 ID (UUID) を取得する必要があります。接続IDを取得する方法はありますか?

4

3 に答える 3

0

「sql-server への sql-connection」という意味であれば、jdbc にはこのための標準的な手段がありません。これは jdbc:mysql の手作りの例です (注意 - リフレクションと制限された文字):

    private long getJdbcConnectionId(Connection conn) {
    long cid = 0;
    try {
        Field f_conn__conn = conn.getClass().getSuperclass().getDeclaredField("_conn");
        f_conn__conn.setAccessible(true);
        Object o_conn__conn = f_conn__conn.get(conn);
        Field f_conn__conn__conn = o_conn__conn.getClass().getSuperclass().getDeclaredField("_conn");
        f_conn__conn__conn.setAccessible(true);
        Object o_conn__conn__conn = f_conn__conn__conn.get(o_conn__conn);
        Field f_connectionId = o_conn__conn__conn.getClass().getSuperclass().getDeclaredField("connectionId");
        f_connectionId.setAccessible(true);
        cid = f_connectionId.getLong(o_conn__conn__conn);
        f_connectionId.setAccessible(false);
        f_conn__conn__conn.setAccessible(false);
        f_conn__conn.setAccessible(false);

    } catch (Exception e) {
        e.printStackTrace();
    }
    return cid;
}
于 2015-08-31T11:17:08.840 に答える