संभवतः JDBC कनेक्शन ऑब्जेक्ट से डेटाबेस नाम प्राप्त करने का सबसे सरल तरीका getCatalog()
के माध्यम से है विधि:
हालाँकि, जैसा कि कॉन्स्टेंटिन ने नीचे अपनी टिप्पणी में बताया, यदि वर्तमान MySQL डेटाबेस को USE dbname
जारी करके बदल दिया जाता है, तो यह मान नहीं बदलेगा। बयान।
getCatalog()
किसी एप्लिकेशन में अभी भी उपयोगी हो सकता है कि
- डेटाबेस नहीं बदलता, या
setCatalog()
. का उपयोग करके "द JDBC वे" काम करता है वर्तमान डेटाबेस को बदलने के लिए,
लेकिन MySQL के लिए, SELECT DATABASE()
. का उपयोग करके समग्र रूप से अधिक सुरक्षित प्रतीत होता है।
यह भी ध्यान दें कि getCatalog()
. के बीच यह संभावित विसंगति और वास्तविक वर्तमान डेटाबेस विशेष JDBC ड्राइवर के व्यवहार पर निर्भर करता है। जिज्ञासा से मैंने SQL सर्वर के लिए Microsoft JDBC ड्राइवर 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