Có lẽ cách đơn giản nhất để có được những tên cơ sở dữ liệu từ các JDBC đối tượng kết nối chính nó là thông qua getCatalog()
phương pháp:
Connection#getCatalog()
Tuy nhiên, như đã chỉ ra trong Konstantin bel bình luận của mình ow, 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 câu lệnh USE dbname
.
getCatalog()
vẫn có thể có ích trong một ứng dụng mà
- không thay đổi cơ sở dữ liệu, hoặc
- không điều "Các JDBC Way" 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, việc sử dụng SELECT DATABASE()
có vẻ an toàn hơn.
Cũng lưu ý rằng chênh lệch tiềm năng giữa getCatalog()
và cơ sở dữ liệu hiện tại thực tế phụ thuộc vào hành vi của trình điều khiển JDBC cụ thể. Trong 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ự nhận thức được sự thay đổi cơ sở dữ liệu hiện tại ngay lập tức sau khi chạy một tuyên bố USE dbname
. Đó 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);
}
sản xuất kết quả như sau:
getCatalog() returns: myDb
Executing: USE master
getCatalog() returns: master
Nguồn
2014-10-18 16:01:18
thể trùng lặp của http://stackoverflow.com/questions/5718952/how-to-get-database-url-from- java-sql-connection – SMA
@almasshaikh "Làm cách nào để lấy url cơ sở dữ liệu từ java.sql.Connection?" không bao giờ có thể giống như tên cơ sở dữ liệu – Paullo
ý tưởng là từ url bạn có thể nhận được tên cơ sở dữ liệu? – SMA