是否可以从 java.sql.Connection 获取 url 或服务器信息 [重复]

Posted

技术标签:

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

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

最好的方法是什么?

【问题讨论】:

***.com/questions/5718952/… 你是对的,没看到。 【参考方案1】:

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

【讨论】:

***.com/questions/5718952/…【参考方案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

【讨论】:

以上是关于是否可以从 java.sql.Connection 获取 url 或服务器信息 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

在多线程系统中使用静态 java.sql.Connection 实例是不是安全?

将 java.sql.Connection 注入 Ninja Framework 的控制器

ThreadLocal + java.sql.Connection + servlet 过滤器 = 2009?

如何在不同的 android 活动中使用 Java.sql.Connection?

java.sql.Connection createArrayOf() 总是返回 null

java.sql.Connection的close方法