【问题标题】:is it possible to get the url or server info from java.sql.Connection [duplicate]是否可以从 java.sql.Connection 获取 url 或服务器信息 [重复]
【发布时间】:2014-01-27 07:50:09
【问题描述】:

我从DriverManager.getConnection(...) 收到java.sql.Connection,想知道服务器主机+端口是什么。
如果它相关,我知道它的MYSQL 服务器。

最好的方法是什么?

【问题讨论】:

标签: java mysql jdbc


【解决方案1】:

或者,您可以尝试connection.getMetaData()。这将为您提供一个DatabaseMetaData 对象,您可以从中调用getURL()(JavaDoc)

【解决方案2】:

您可以包装连接的提供者,例如使用Commons DBCP

org.apache.commons.dbcp.BasicDataSource 类有 getter 和 setter。 (JavaDoc)

【讨论】:

    【解决方案3】:

    您可以在 Connection 周围使用其他一些类,并在您仍然知道必填字段时填写它们:

    class WrappedConnection {
       public final String host;
       // ...
       public final Connection connection;
    
       WrappedConnection(Connection connection, String host, String database) {      
          this.connection = connection;
          this.host = host;
          // ...
       }
    }
    

    如果您无法传递自定义数据结构,而必须传递 Connection,请使用

    public static final WeakHashMap<Connection, WrappedConnection> 
    

    您可以随时通过此地图轻松获取元数据(在这种情况下不需要Connection字段)

    【讨论】:

    • 这将是针对您有许多不同数据库连接的情况的解决方案。很多时候,一个应用程序在其生命周期内只连接到 1 或 2 个数据库,这会使 Map of Connections 的开销很大。
    【解决方案4】:

    您可以通过以下方式获取主机名和端口名:

    con.getMetaData().getURL()
    

    【讨论】:

      【解决方案5】:
      Connection con = DriverManager.getConnection(connectionUrl, username,
                          pass);
      DatabaseMetaData metaData = con.getMetaData();
      String url = metaData.getURL();
      

      此“url”将包含您的主机名和端口名,例如 jdbc:mysql://myhost:3306/mySchema

      【讨论】:

        猜你喜欢
        • 2022-08-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-11-20
        • 2011-02-26
        • 1970-01-01
        • 2014-12-19
        • 2015-07-05
        相关资源
        最近更新 更多