gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 06:31:41 25 4
gpt4 key购买 nike

如何从连接对象中获取数据库名称

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

如何从 con 中获取数据库名称

最佳答案

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

Connection#getCatalog()

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

getCatalog() 在应用程序中可能仍然有用

  • 不改变数据库,或者
  • 通过使用 setCatalog() 更改当前数据库以“JDBC 方式”执行操作,

但对于 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

关于java - 获取连接的mysql数据库名(JDBC),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26441303/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com