是否可以从 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?