2017-02-23 14 views
1

私はMSSQLについてテストしています。 "接続後に作成されたセッション情報を長くする方法は?"jdbc接続からクライアントIPポートを知る方法

したがって、MSSQL JDBCとの接続を試み、クライアントIpとポートを使用してsys.dm_exec_sessionとsys.dm_exec_connectionを選択してください。

しかし、クライアントIpとポートをJDBC接続から取得する方法はありません。

ソケットを使用してJDBC接続を作成することはできますか?

私のテストコードを表示します。

try { 
     DriverManager.registerDriver(
       new com.microsoft.sqlserver.jdbc.SQLServerDriver()); 
     DriverManager.setLoginTimeout(10); 
    } catch (Exception ex) { 
     System.out.println("Fail to register sqlserver driver."); 
     return; 
    } 

    String url = "jdbc:sqlserver://"; 
    String ip = "10.1.1.1"; 
    String port = "1433"; 
    String catalog = "master"; 
    String user = "jtlee"; 
    String pwd = "123456789"; 

    url = url + ip + ":" + port + ";databasename=" + catalog; 

    Connection conn = null; 
    PreparedStatement pstmt = null; 
    ResultSet rs = null; 

    try { 
     long startTime = System.nanoTime(); 

     conn = DriverManager.getConnection(url, user, pwd); 
     pstmt = conn.prepareStatement(
       "SELECT " 
       + "  count(*) " 
       + "FROM " 
       + "  sys.dm_exec_connections connections," 
       + "  sys.dm_exec_sessions sessions " 
       + "WHERE " 
       + "  connections.session_id = sessions.session_id " 
       + "  and connections.client_net_address= ? " 
       + "  and connections.client_tcp_port= ? "); 

     /* I need this information... */ 
     String clientIp; 
     int clientPort; 

     pstmt.setString(1, clientIp); 
     pstmt.setInt(2, clientPort); 
     rs = pstmt.executeQuery(); 

     if (rs.next()) { 
      ... 

私の奇妙な英語を読んでくれてありがとう。

答えて

2

あなたがちょうどクエリWHERE [email protected]@SPIDsys.dm_exec_connections、例えば、

sql = 
     "SELECT client_net_address, client_tcp_port, local_net_address, local_tcp_port " + 
     "FROM sys.dm_exec_connections " + 
     "WHERE [email protected]@SPID"; 
try (
     Statement st = conn.createStatement(); 
     ResultSet rs = st.executeQuery(sql)) { 
    while (rs.next()) { 
     System.out.printf("Connection is between %s:%d on the server and %s:%d as the client.%n", 
       rs.getString("local_net_address"), 
       rs.getInt("local_tcp_port"), 
       rs.getString("client_net_address"), 
       rs.getInt("client_tcp_port") 
       ); 
    } 
} 

を生産することができ、アクティブな接続のためのIPとポートを取得したい場合は

Connection is between 192.168.1.12:1433 on the server and 192.168.1.101:49744 as the client. 
関連する問題