如何从连接对象
获取数据库名称try {
this.ds = (DataSource) new InitialContext().lookup("java:comp/env/jdbc/amger");
} catch (NamingException ne) {
}
Connection conObj = ds.getConnection();
如何从con
获取该数据库名称答案 0 :(得分:13)
从JDBC Connection对象本身获取数据库名称的最简单方法可能是通过getCatalog()
方法:
然而,正如Konstantin在下面的评论中指出的那样,如果通过发出USE dbname
语句来更改当前的MySQL数据库,则该值不会改变。
getCatalog()
在
setCatalog()
来更改当前数据库,但是对于MySQL,使用SELECT DATABASE()
似乎总体上更安全。
另请注意,getCatalog()
与实际当前数据库之间的这种潜在差异取决于特定JDBC驱动程序的行为。出于好奇,我尝试了类似于SQL Server的Microsoft JDBC Driver 4.0,.getCatalog()
确实在运行USE dbname
语句后立即意识到对当前数据库的更改。也就是代码
String connectionUrl = "jdbc:sqlserver://localhost:52865;"
+ "databaseName=myDb;" + "integratedSecurity=true";
try (Connection con = DriverManager.getConnection(connectionUrl)) {
System.out.println(String.format(
"getCatalog() returns: %s",
con.getCatalog()));
try (Statement s = con.createStatement()) {
System.out.println(" Executing: USE master");
s.execute("USE master");
}
System.out.println(String.format(
"getCatalog() returns: %s",
con.getCatalog()));
} catch (Exception e) {
e.printStackTrace(System.out);
}
产生了以下结果:
getCatalog() returns: myDb
Executing: USE master
getCatalog() returns: master
答案 1 :(得分:2)
如果您知道DB是Mysql,您可以在连接上执行SELECT DATABASE()
并使用当前数据库名称读取结果集。
这是DATABASE函数的description。
答案 2 :(得分:1)
我们假设您使用url作为“jdbc:mysql:// localhost / test”
然后执行以下操作:
DatabaseMetaData dmd = connection.getMetaData();
String url = dmd.getURL();
System.out.println(url.substring(url.lastIndexOf("/") + 1));
答案 3 :(得分:0)
运行
System.out.println(connection.getMetaData().getURL());