ओरेकल से जेडीबीसी में एक ही कॉल में कई परिणाम सेट प्राप्त करना संभव है। ऐसा करने के कुछ तरीके हैं; एक good post at Oracle-Base shows how।
मैं जिस तंत्र का उपयोग करता हूं वह एक कॉल करने योग्य कथन में एक अनाम ब्लॉक बनाना है, फिर आउटपुट पैरामीटर के रूप में प्रत्येक परिणाम सेट के लिए SYS_REFCURSOR
बांधें।
यहां कुछ कोड है जो बस यही करता है। यह त्रुटि से निपटने के लिए आलसी है, लेकिन यह भर में विचार हो जाता है:
public void getMultiple() throws Exception {
// get connection
Connection conn = DriverManager.getConnection(TestConfig.JDBC_URL, TestConfig.DB_USERNAME, TestConfig.DB_PASSWORD);
// here's the statement; it uses an anonymous block. In that block,
// we've declared two SYS_REFCURSOR objects which are opened over our
// SELECT statements. Once the statements are opened, we bind the
// SYS_REFCURSOR objects so they can be retrieved from JDBC
String s =
"DECLARE" +
" l_rs1 SYS_REFCURSOR; " +
" l_rs2 SYS_REFCURSOR; " +
"BEGIN "+
" OPEN l_rs1 FOR " +
" SELECT 'Moose' FROM DUAL;" +
" OPEN l_rs2 FOR " +
" SELECT 'Squirrel' FROM DUAL; " +
" ? := l_rs1;" +
" ? := l_rs2;" +
"END;";
// prepare the callable statement, registering
// the output parameter we want
CallableStatement cs = conn.prepareCall(s);
cs.registerOutParameter(1, OracleTypes.CURSOR);
cs.registerOutParameter(2, OracleTypes.CURSOR);
// execute the callable statement
cs.execute();
// retrieve the result sets by getting the bound output objects and
// casting them to Java ResultSet objects
ResultSet rs1 = (ResultSet) cs.getObject(1);
ResultSet rs2 = (ResultSet) cs.getObject(2);
// advance the first result set and print the string it yields
rs1.next();
System.out.printf("Result set 1 has '%s'\n", rs1.getString(1));
// advance the second result set and print the string it yields
rs2.next();
System.out.printf("Result set 2 has '%s'\n", rs2.getString(1));
// close everything up
rs2.close();
rs1.close();
cs.close();
conn.close();
}
मुझे आशा है कि तुम बाहर में मदद करता है!
धन्यवाद। लेकिन क्या ऐसा कोई तरीका है कि मुझे 2 अलग डीबी कॉल करने की ज़रूरत नहीं है? – Daud
यदि दोनों एक ही प्रकार का भुगतान करते हैं तो आप संघ का उपयोग कर सकते हैं। लेकिन यह वास्तविक बीएडी अभ्यास है –
@ डॉउड: नहीं, आपको दो कॉल की आवश्यकता है। –