如何从连接对象中获取数据库名称
try {
this.ds = (DataSource) new InitialContext().lookup("java:comp/env/jdbc/amger");
} catch (NamingException ne) {
}
Connection conObj = ds.getConnection();
如何从 con 获取数据库名称
从 JDBC Connection 对象本身获取数据库名称的最直接方法可能是通过getCatalog()
method:
连接#getCatalog() http://docs.oracle.com/javase/7/docs/api/java/sql/Connection.html#getCatalog()
然而,正如 Konstantin 在下面的评论中指出的那样,如果当前的 MySQL 数据库通过发出USE dbname
陈述。
getCatalog()
在以下应用程序中可能仍然有用
- 不更改数据库,或者
- 通过使用“JDBC 方式”做事
setCatalog()
更改当前数据库,
但对于 MySQL,使用SELECT DATABASE()
总体看来更安全。
另请注意,这之间的潜在差异getCatalog()
当前的实际数据库取决于特定 JDBC 驱动程序的行为。出于好奇,我尝试了与 Microsoft JDBC Driver 4.0 for SQL Server 类似的操作,.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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)