Mungkin cara paling mudah untuk mendapatkan nama database dari objek Koneksi JDBC itu sendiri adalah melalui getCatalog()
metode:
Namun, seperti yang ditunjukkan Konstantin dalam komentarnya di bawah, nilai itu tidak akan berubah jika database MySQL saat ini diubah dengan mengeluarkan USE dbname
penyataan.
getCatalog()
mungkin masih berguna dalam aplikasi yang
- tidak mengubah database, atau
- melakukan sesuatu "JDBC Way" dengan menggunakan
setCatalog()
untuk mengubah database saat ini,
tetapi untuk MySQL, menggunakan SELECT DATABASE()
tampaknya lebih aman secara keseluruhan.
Perhatikan juga bahwa potensi perbedaan antara getCatalog()
dan database aktual saat ini tergantung pada perilaku driver JDBC tertentu. Karena penasaran saya mencoba sesuatu yang mirip dengan Microsoft JDBC Driver 4.0 untuk SQL Server dan .getCatalog()
memang menyadari perubahan ke database saat ini segera setelah menjalankan USE dbname
penyataan. Yaitu, kode
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);
}
menghasilkan hasil sebagai berikut:
getCatalog() returns: myDb
Executing: USE master
getCatalog() returns: master