Có lẽ cách đơn giản nhất để lấy tên cơ sở dữ liệu từ chính đối tượng Kết nối JDBC là thông qua getCatalog()
phương pháp:
Tuy nhiên, như Konstantin đã chỉ ra trong nhận xét của mình bên dưới, giá trị đó sẽ không thay đổi nếu cơ sở dữ liệu MySQL hiện tại được thay đổi bằng cách phát hành USE dbname
tuyên bố.
getCatalog()
vẫn có thể hữu ích trong một ứng dụng
- không thay đổi cơ sở dữ liệu hoặc
- thực hiện những điều "Cách JDBC" bằng cách sử dụng
setCatalog()
để thay đổi cơ sở dữ liệu hiện tại,
nhưng đối với MySQL, sử dụng SELECT DATABASE()
có vẻ an toàn hơn về tổng thể.
Cũng lưu ý rằng sự khác biệt tiềm ẩn này giữa getCatalog()
và cơ sở dữ liệu hiện tại thực sự phụ thuộc vào hành vi của trình điều khiển JDBC cụ thể. Vì tò mò, tôi đã thử một cái gì đó tương tự với Microsoft JDBC Driver 4.0 cho SQL Server và .getCatalog()
thực sự đã biết về sự thay đổi đối với cơ sở dữ liệu hiện tại ngay lập tức sau khi chạy USE dbname
tuyên bố. Đó là, mã
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);
}
tạo ra các kết quả sau:
getCatalog() returns: myDb
Executing: USE master
getCatalog() returns: master