获取连接的mysql数据库名称(JDBC)

时间:2014-10-18 15:18:55

标签: java mysql jdbc

如何从连接对象

获取数据库名称
try {
    this.ds = (DataSource) new InitialContext().lookup("java:comp/env/jdbc/amger");
} catch (NamingException ne) {
}
Connection conObj = ds.getConnection();

如何从con

获取该数据库名称

4 个答案:

答案 0 :(得分:13)

从JDBC Connection对象本身获取数据库名称的最简单方法可能是通过getCatalog()方法:

Connection#getCatalog()

然而,正如Konstantin在下面的评论中指出的那样,如果通过发出USE dbname语句来更改当前的MySQL数据库,则该值不会改变。

getCatalog()

的应用程序中可能仍然有用
  • 不会更改数据库,或
  • 做事情" JDBC方式"通过使用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());
  • 将输出粘贴到记事本中
  • 搜索“ databaseName = yourDBName”的值