यह ट्यूटोरियल बताता है कि डेटा को पुनः प्राप्त करने के लिए JDBC ResultSet का उपयोग कैसे करें। हम उदाहरणों के साथ ResultSetMetaData और DatabaseMetaData इंटरफेस के बारे में भी जानेंगे:
JDBC DriverManager ट्यूटोरियल JDBC ट्यूटोरियल सीरीज में, हमने सीखा कि JDBC का उपयोग कैसे करें DriverManager और इसके तरीके, Java अनुप्रयोगों में JDBC ReadyedStatement।
इस ट्यूटोरियल में, हम JDBC में शेष इंटरफेस पर चर्चा करेंगे। हमने अपने पिछले ट्यूटोरियल्स में स्टेटमेंट, रेडीस्टेटमेंट और कॉलेबलस्टेटमेंट इंटरफेस को कवर किया है।
यहां, हम जेडीबीसी रिजल्टसेट, रिजल्टसेटमेटाडेटा और डेटाबेसमेटाडेटा इंटरफेस, उनके तरीकों और जावा प्रोग्राम में तरीकों का उपयोग करने के तरीके के बारे में जानेंगे।3
JDBC ResultSet इंटरफ़ेस
ResultSet इंटरफ़ेस java.sql पैकेज में मौजूद है। इसका उपयोग जावा प्रोग्राम में SQL कथनों के निष्पादन के बाद डेटाबेस तालिका से लौटाए गए डेटा को संग्रहीत करने के लिए किया जाता है। ResultSet का ऑब्जेक्ट परिणाम डेटा पर कर्सर पॉइंट को बनाए रखता है। डिफ़ॉल्ट रूप से, परिणाम डेटा की पहली पंक्ति से पहले कर्सर की स्थिति।
अगली () विधि का उपयोग कर्सर को आगे की दिशा में अगली स्थिति में ले जाने के लिए किया जाता है। यदि कोई और रिकॉर्ड नहीं है तो यह FALSE लौटाएगा। यह किसी भी स्टेटमेंट ऑब्जेक्ट का उपयोग करके एग्जीक्यूटिव () विधि को कॉल करके डेटा को पुनः प्राप्त करता है। यह स्टेटमेंट या रेडीस्टेटमेंट या कॉल करने योग्य स्टेटमेंट ऑब्जेक्ट हो सकता है। तैयार वक्तव्य, औरकॉलम की तालिका का स्कीमा नाम देता है
ResultSetMetaData उदाहरण
package com.STH.JDBC; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.ResultSetMetaData; import java.sql.SQLException; import java.sql.Statement; public class ResultSetMetaData_Example { public static void main(String[] args) throws ClassNotFoundException, SQLException { // TODO Auto-generated method stub String QUERY= " select * from employee_details"; Class.forName("oracle.jdbc.driver.OracleDriver"); try(Connection conn = DriverManager.getConnection("jdbc:oracle:thin:system/pass123@localhost:1521:XE")) { Statement statemnt1 = conn.createStatement(); ResultSet rs1 =null; rs1 = statemnt1.executeQuery(QUERY); ResultSetMetaData rsmd = rs1.getMetaData(); System.out.println(" We are using ResultSetMetaData "); System.out.println("No: of Columns: "+ rsmd.getColumnCount()); System.out.println("ColumnName of Column 1: "+ rsmd.getColumnName(1)); System.out.println("Data Type of Column 2: " + rsmd.getColumnTypeName(2)); System.out.println("Table Name of the Column 1: " + rsmd.getTableName(1)); System.out.println("Schema Name of the Column 1: " + rsmd.getSchemaName(1)); } } }
आउटपुट:
स्पष्टीकरण:
उपरोक्त कार्यक्रम में, हमने getColumnCount(),getColumnName(), getColumnTypeName(), getTableName() और getSchemaName() विधियों को ResultSetMetaData इंटरफ़ेस में लागू किया है।
DatabaseMetaData
DatabaseMetaData इंटरफ़ेस डेटाबेस के बारे में जानकारी देता है जैसे DatabaseName, Database संस्करण, और इसी तरह।
DatabaseMetaData इंटरफ़ेस के महत्वपूर्ण तरीके:
विधि का नाम | विवरण27 |
---|---|
स्ट्रिंग getDriverName() | यह JDBC ड्राइवर का नाम लौटाएगा जिसका उपयोग हम अपने जावा प्रोग्राम में कर रहे हैं |
स्ट्रिंग getDriverVersion() | यह JDBC ड्राइवर संस्करण संख्या लौटाता है |
String getUserName() | यह उस डेटाबेस का उपयोगकर्ता नाम लौटाता है जिसका हम उपयोग कर रहे हैं |
स्ट्रिंग getDatabaseProductName() | यह लौटाता है डेटाबेस का नाम जो हम हैं |
स्ट्रिंग getDatabaseProductVersion() | यह उस डेटाबेस की संस्करण संख्या लौटाता है जिसका हम उपयोग कर रहे हैं |
ResultSet getSchemas() | यह कनेक्टेड डेटाबेस में उपलब्ध स्कीमा के नाम लौटाता है |
String getStringFunctions() | यह कनेक्टेड डेटाबेस में उपलब्ध स्ट्रिंग फ़ंक्शंस की सूची लौटाता है |
स्ट्रिंग getTimeDateFunctions() | यह कनेक्टेड डेटाबेस में उपलब्ध समय और दिनांक कार्यों की सूची देता है |
स्ट्रिंग getURL() | यह डेटाबेस के लिए URL लौटाता है31 |
बूलियन isReadOnly() | यह बताता है कि डेटाबेस रीड-ओनली मोड में है या नहीं |
बूलियन सपोर्टबैचअपडेट्स() | यह लौटाता है कि डेटाबेस सपोर्ट बैच अपडेट करता है या नहीं |
बूलियन सपोर्ट्स सेवपॉइंट्स() | यह लौटाता है कि डेटाबेस सेवपॉइंट्स का समर्थन करता है या नहीं |
बूलियन सपोर्टस्टेटमेंटपूलिंग() | यह बताता है कि डेटाबेस स्टेटमेंट पूलिंग का समर्थन करता है या नहीं |
बूलियन सपोर्ट्स स्टोर्डप्रोसेडर () 5> | यह बताता है कि क्या डेटाबेस आउटर जॉइन का समर्थन करता है |
यहां, हमने DatabaseMetaData इंटरफ़ेस के कुछ महत्वपूर्ण तरीकों को सूचीबद्ध किया है। आप इसका उल्लेख कर सकते हैं Oracle की आधिकारिक साइट जहां आप DatabaseMetaData इंटरफ़ेस में उपलब्ध सभी विधियों को देख सकते हैं।
DatabaseMetaData उदाहरण:
package com.STH.JDBC; import java.sql.Connection; import java.sql.DatabaseMetaData; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.ResultSetMetaData; import java.sql.SQLException; import java.sql.Statement; public class DatabaseMetaData_Example { public static void main(String[] args) throws ClassNotFoundException, SQLException { // TODO Auto-generated method stub Class.forName("oracle.jdbc.driver.OracleDriver"); Connection conn = DriverManager.getConnection("jdbc:oracle:thin:system/pass123@localhost:1521:XE"); DatabaseMetaData dbmd = conn.getMetaData(); System.out.println("Using DatabaseMetaData"); System.out.println("Driver Name: " + dbmd.getDriverName()); System.out.println("Driver Version: "+ dbmd.getDriverVersion()); System.out.println("UserName of the Database: " + dbmd.getUserName()); System.out.println("Database Product Name:" + dbmd.getDatabaseProductName()); System.out.println("Database Product Version: " + dbmd.getDatabaseProductVersion()); System.out.println("List of String Functions in the Database: " + dbmd.getStringFunctions()); System.out.println("List of Time & Date functions in the Database: " + dbmd.getTimeDateFunctions()); System.out.println("URL of the Database: " + dbmd.getURL()); System.out.println("Database is read - only? " +dbmd.isReadOnly()); System.out.println("Support Batch Updates? " + dbmd.supportsBatchUpdates()); System.out.println("Support savepoints? " + dbmd.supportsSavepoints()); System.out.println("Support Statement Pooling? "+ dbmd.supportsStatementPooling()); System.out.println("Support Stored Procedures? " + dbmd.supportsStoredProcedures()); System.out.println("Support Outer Join? "+ dbmd.supportsOuterJoins()); } }
आउटपुट:
स्पष्टीकरण:
उपरोक्त प्रोग्राम में, हमने getDriverName(), getDriverVersion() का उपयोग/कार्यान्वयन किया है , getUserName(), getDatabaseProductName(), getDatabaseProductVersion(), getStringFunctions(), getTimeDateFunctions(), getURL(), isReadOnly(), supportBatchUpdates(), supportStatementPooling(), supportSavepoints(), supportStoredProcedures() और supportOuterJoins() विधियों में DatabaseMetaData इंटरफ़ेस।
ध्यान देने योग्य बिंदु:
- JDBC ResultSet इंटरफ़ेस का उपयोग डेटाबेस से डेटा को स्टोर करने और हमारे जावा प्रोग्राम में इसका उपयोग करने के लिए किया जाता है।
- अपडेटXXX() विधियों का उपयोग करके हम डेटा को अपडेट करने के लिए रिजल्टसेट का भी उपयोग कर सकते हैं।
- परिणामसेट ऑब्जेक्ट परिणाम डेटा की पहली पंक्ति से पहले कर्सर को इंगित करता है। अगली () विधि का उपयोग करके, हम ResultSet के माध्यम से पुनरावृति कर सकते हैं।
- ResultSet ऑब्जेक्ट में आगे बढ़ने के लिए हमारे पास ResultSet के नेविगेशनल तरीके हैं
- ResultMetaData का उपयोग ResultSet के बारे में अधिक जानकारी प्राप्त करने के लिए किया जाता है जैसे कॉलम का नाम, कॉलम की संख्या, कॉलम का डेटाटाइप आदि।
Q#1) इसका क्या उपयोग हैResultSet?
जवाब: ResultSet का उपयोग DB से डेटा को स्टोर और पुनर्प्राप्त करने के लिए किया जाता है। जब ExecuteQuery() विधि निष्पादित हो जाती है, तो यह परिणामसेट ऑब्जेक्ट वापस कर देगा। हम तर्क करने के लिए अपने प्रोग्राम में उस ResultSet ऑब्जेक्ट का उपयोग कर सकते हैं।
प्रश्न #2) कैसे चेक करें कि ResultSet खाली है या नहीं?
उत्तर: IsResultSet Empty को जांचने के लिए लंबाई (), आकार () जैसी कोई पूर्वनिर्धारित विधियाँ उपलब्ध नहीं हैं। हम पुनरावृति के लिए अगली () विधि का उपयोग कर सकते हैं और यदि यह सही है, तो यह खाली नहीं है, अगर यह गलत है, तो इसका मतलब है कि परिणामसेट खाली है।
प्रश्न #3) क्या यह संभव है कि परिणामसेट खाली हो सकता है?
जवाब: नहीं, executeQuery() मेथड रिजल्टसेट ऑब्जेक्ट देता है जो कभी भी खाली नहीं हो सकता।
Q #4) अपडेट करने योग्य रिजल्टसेट क्या है?
जवाब: अपडेट करने योग्य रिजल्टसेट ऑब्जेक्ट का उपयोग कॉलम में डेटा को अपडेट करने, कॉलम में डेटा डालने और पंक्तियों को हटाने के लिए किया जाता है। एक परिणामसेट को अद्यतन करने योग्य बनाने के लिए, हमें स्क्रॉल प्रकार को संवेदनशील या असंवेदनशील और CONCUR प्रकार को अद्यतन करने योग्य बनाना होगा।
ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_UPDATABLE.
प्रश्न #5) कनेक्ट किए गए डेटाबेस का नाम कैसे प्राप्त करें?
जवाब: हम DatabaseMetaData ऑब्जेक्ट के getDatabaseProductName() मेथड का इस्तेमाल कर सकते हैं।
निष्कर्ष
इस ट्यूटोरियल में हमने चर्चा की है कि क्या हैं ResultSet, ResultSetMetaData, और DatabaseMetaData इंटरफेस और उनके महत्वपूर्ण तरीके जो आमतौर पर JDBC प्रोग्राम में उपयोग किए जाते हैं। हमने भी देखा हैरिजल्टसेट का उपयोग करके DB में डेटा कैसे अपडेट करें। ResultSetMetadata में ResultSet के बारे में जानकारी होती है जैसे कि कॉलम का नाम, कॉलम की संख्या, और इसी तरह।
DatabaseMetaData में डेटाबेस की जानकारी होती है।
& lt;
CallableStatement इंटरफ़ेस, Statement इंटरफ़ेस के उप-इंटरफ़ेस हैं।
स्टेटमेंट इंटरफ़ेस
Statement statemnt1 = conn.createStatement(); ResultSet rs1 = statemnt1.executeQuery(“Select * from EMPLOYEE_DETAILS”);
PreparedStatement इंटरफ़ेस
PreparedStatement pstatemnt1 = conn.prepareStatement(insert_query); ResultSet rs1 = pstatemnt1.executeQuery(“Select * from EMPLOYEE_DETAILS”);
हम परिणामों के माध्यम से पुनरावृति करते हुए कॉलम का डेटा प्राप्त करने के लिए getX () विधि का उपयोग करें जहां X - कॉलम का डेटाटाइप है। getX() विधियों का उपयोग करके मान प्राप्त करने के लिए हम या तो कॉलम नाम या इंडेक्स का उपयोग कर सकते हैं।
while(rs1.next()) { int empNum = rs1.getInt("empNum"); String lastName = rs1.getString("lastName"); String firstName = rs1.getString("firstName"); String email = rs1.getString("email"); String deptNum = rs1.getString("deptNum"); String salary = rs1.getString("salary"); System.out.println(empNum + "," +lastName+ "," +firstName+ "," +email +","+deptNum +"," +salary); }
हम getX() विधियों में कॉलम नाम के बजाय कॉलम के इंडेक्स नंबर का भी उल्लेख कर सकते हैं।
while(rs1.next()) { int empNum = rs1.getInt(1); String lastName = rs1.getString(2); String firstName = rs1.getString(3); String email = rs1.getString(4); String deptNum = rs1.getString(5); String salary = rs1.getString(6); System.out.println(empNum + "," +lastName+ "," +firstName+ "," +email +","+deptNum +"," +salary); }
परिणामसेट प्रकार
डिफ़ॉल्ट रूप से, हम परिणामसेट में डेटा/मानों को पुनरावृत्त कर सकते हैं जो आगे की दिशा में निष्पादित SQL कथन के आउटपुट के रूप में वापस आ गए हैं। स्क्रॉल करने योग्य परिणामसेट का उपयोग करके हम अन्य दिशाओं में मानों को पुनरावृत्त कर सकते हैं। Statement, ReadyedStatement, और CallableStatement ऑब्जेक्ट बनाते समय हम ResultSet के प्रकार और समरूपता को निर्दिष्ट कर सकते हैं।
ResultSet में 3 प्रकार होते हैं। वे हैं:
- TYPE_FORWARD_ONLY: यह डिफ़ॉल्ट विकल्प है, जहां कर्सर शुरू से अंत तक यानी आगे की दिशा में चलता है।
- TYPE_SCROLL_INSENSITIVE: इस प्रकार में, यह कर्सर को आगे और पीछे दोनों दिशाओं में ले जाने में मदद करेगा। यदि हम संग्रहीत डेटा को पुनरावृत्त करते समय डेटा में कोई परिवर्तन करते हैं तो यह डेटासेट में अपडेट नहीं होगा यदि कोई डीबी में डेटा बदलता है। क्योंकि डेटासेट में उस समय से डेटा होता है जब SQL क्वेरी वापस आती हैडेटा
- TYPE_SCROLL_SENSITIVE: यह TYPE_SCROLL_INSENSITIVE के समान है, अंतर यह है कि यदि कोई SQL क्वेरी द्वारा डेटा वापस करने के बाद डेटा को अपडेट करता है, तो इसे पुनरावृत्त करते समय यह डेटासेट में परिवर्तन को प्रतिबिंबित करेगा।
ResultSet Concurrency
ResultSet में Concurrency के 2 तरीके हैं। वे हैं:
- ResultSet.CONCUR_READ_ONLY: यह डिफ़ॉल्ट समवर्ती मोड है। हम केवल ResultSet में डेटा पढ़ सकते हैं। अद्यतनीकरण लागू नहीं है।
- ResultSet.CONCUR_UPDATABLE: हम ResultSet वस्तु में डेटा अद्यतन कर सकते हैं।
कुछ डेटाबेस सभी के लिए समवर्ती मोड का समर्थन नहीं करते परिणामसेट प्रकार। उस स्थिति में, हमें यह जांचने की आवश्यकता है कि क्या वे supportResultSetConcurrency() पद्धति का उपयोग करके हमारे वांछित प्रकार और समवर्ती मोड का समर्थन करते हैं।
विधियाँ ResultSet इंटरफ़ेस में
ResultSet विधियों की 4 श्रेणियां हैं। वे हैं:
- नेविगेशनल तरीके
- गेटर तरीके
- सेटर तरीके
- विविध तरीके
सबसे पहले, हम नेविगेशनल तरीकों पर चर्चा करेंगे और फिर आगे बढ़ेंगे।
#1) नेविगेशनल तरीके
इस विधि का उपयोग कर्सर को डेटासेट के चारों ओर ले जाने के लिए किया जाता है।
- बूलियन एब्सोल्यूट (इंट रो): इसका उपयोग कर्सर को निर्दिष्ट पंक्ति में ले जाने के लिए किया जाता है जो पैरामीटर में उल्लिखित है और यदि ऑपरेशन सफल होता है तो सही हो जाता है और गलत हो जाता है।
- शून्यafterLast(): यह ResultSet कर्सर को अंतिम पंक्ति के बाद स्थानांतरित करने के लिए बनाता है।
- Void beforeFirst(): यह ResultSet कर्सर को पहली पंक्ति से पहले स्थानांतरित करने के लिए बनाता है।13
- बूलियन फर्स्ट (): यह रिजल्टसेट कर्सर को पहली पंक्ति में ले जाने के लिए बनाता है। यदि ऑपरेशन सफल होता है तो यह सही होता है अन्यथा गलत।
- बूलियन अंतिम (): यह रिजल्टसेट कर्सर को अंतिम पंक्ति में ले जाने के लिए बनाता है। यदि ऑपरेशन सफल होता है तो यह सही होता है अन्यथा गलत।
- बूलियन अगला (): यह रिजल्टसेट कर्सर को अगली पंक्ति में ले जाने के लिए बनाता है। यदि अधिक रिकॉर्ड हैं तो यह सही है और यदि कोई और रिकॉर्ड नहीं है तो गलत है।
- बूलियन पिछला (): यह रिजल्टसेट कर्सर को पिछली पंक्ति में ले जाने के लिए बनाता है। यदि ऑपरेशन सफल होता है तो यह सही होता है अन्यथा गलत।
- बूलियन रिश्तेदार (): यह कर्सर को आगे या पीछे की दिशा में दी गई पंक्तियों की संख्या में ले जाता है। 12> Int getRow(): यह वर्तमान पंक्ति संख्या लौटाता है जिसे ResultSet ऑब्जेक्ट अभी इंगित कर रहा है।
- Void MoveToCurrentRow(): यह कर्सर को वापस वर्तमान पंक्ति यदि यह वर्तमान में सम्मिलित पंक्ति में है।
- Void MoveToInsertRow (): यह डेटाबेस में पंक्ति सम्मिलित करने के लिए कर्सर को विशिष्ट पंक्ति में ले जाता है। यह वर्तमान कर्सर स्थान को याद रखता है। इसलिए हम कर्सर को सम्मिलन के बाद वर्तमान पंक्ति में ले जाने के लिए MoveToCurrentRow() विधि का उपयोग कर सकते हैं।
इस ट्यूटोरियल में,सभी प्रोग्राम जावा में लिखे गए हैं। हमने Java 8 संस्करण और Oracle DB का उपयोग किया है।
>>आप Oracle सॉफ्टवेयर यहाँ से डाउनलोड कर सकते हैं
>>आप यहां से जावा संस्करण 8 डाउनलोड कर सकते हैं
इसमें चरण-दर-चरण जावा स्थापना प्रक्रिया है।
JDBC ResultSet उदाहरण कार्यक्रम: (नेविगेशन विधियों का उपयोग करके)
package com.STH.JDBC; import java.sql.Connection; import java.sql.DatabaseMetaData; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; public class ResultSet_Example { public static void main(String[] args) throws ClassNotFoundException { // TODO Auto-generated method stub //Select query String select_query = "select * from employee_details"; Class.forName("oracle.jdbc.driver.OracleDriver"); //Connecting to Oracle DB try(Connection conn = DriverManager.getConnection("jdbc:oracle:thin:system/pass123@localhost:1521:X E")) { //Creating DatabaseMetaData object DatabaseMetaData dbmd = conn.getMetaData(); //Checking whether the driver supports scroll sensitive type and concur updatable boolean isSupportResultSetType = dbmd.supportsResultSetConcurrency(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE); if(isSupportResultSetType == true) { // Creating prepared Statement PreparedStatement pstatemnt1 = conn.prepareStatement(select_query,ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet. CONCUR_UPDATABLE); ResultSet rs = pstatemnt1.executeQuery(); //Moving the cursor to point first row rs.first(); System.out.println("FIRST ROW \n EMP NUM = " + rs.getInt("empNum") + "\n LAST NAME = "+ rs.getString(2)+"\n FIRST NAME = " + rs.getString(3)); //Moving the cursor to point last row rs.last(); System.out.println("LAST ROW \n EMP NUM = " + rs.getInt("empNum") + "\n LAST NAME = "+ rs.getString(2)+"\n FIRST NAME = " + rs.getString(3)); //Moving the cursor to point before first row rs.beforeFirst(); System.out.println("Cursor is pointing at before the first row. Use next() to move in forward direction"); //Moving the cursor to point first row using next() rs.next(); System.out.println("FIRST ROW \n EMP NUM = " + rs.getInt("empNum") + "\n LAST NAME = "+ rs.getString(2)+"\n FIRST NAME = " + rs.getString(3)); //Moving the cursor to point after last row rs.afterLast(); System.out.println("Cursor is pointing at after the last row. Use previous() to move in backward direction"); //Moving the cursor to point last row using previous() rs.previous(); System.out.println("LAST ROW \n EMP NUM = " + rs.getInt("empNum") + "\n LAST NAME = "+ rs.getString(2)+"\n FIRST NAME = " + rs.getString(3)); //Moving the cursor to point third row rs.absolute(3); System.out.println("Cursor is pointing at 3rd row"); System.out.println("THIRD ROW \n EMP NUM = " + rs.getInt("empNum") + "\n LAST NAME = "+ rs.getString(2)+"\n FIRST NAME = " + rs.getString(3)); //Moving the cursor to point previous row of third row rs.relative(-1); System.out.println("Cursor is pointing to the 1 row previous to the 3rd row"); System.out.println("Second ROW \n EMP NUM = " + rs.getInt("empNum") + "\n LAST NAME = "+ rs.getString(2)+"\n FIRST NAME = " + rs.getString(3)); //Moving the cursor to point 4th row after the 2nd row rs.relative(4); System.out.println("Cursor is pointing to the 4th row after the 2nd row"); System.out.println("SIXTH ROW \n EMP NUM = " + rs.getInt("empNum") + "\n LAST NAME = "+ rs.getString(2)+"\n FIRST NAME = " + rs.getString(3)); //Moving the cursor to point current row System.out.println(" Current Row = " + rs.getRow()); } } catch (SQLException e) { e.printStackTrace(); } } }
आउटपुट:
कर्मचारी_विवरण तालिका में डेटा
![](/wp-content/uploads/guides/7033dwpdfa-2.png)
व्याख्या:
उपर्युक्त कार्यक्रम में हमने पहले (), अंतिम (), पहले पहले (), बाद में (), अगले () को लागू किया है। ), पिछला (), निरपेक्ष (), सापेक्ष () और getRow () विधियाँ ResultSet में। इन तरीकों का उपयोग करने के लिए हम PreparStatement मेथड में ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE मान सेट करते हैं। गेट्टर मेथड्स
ResultSet ने डेटाबेस से टेबल के डेटा को स्टोर किया है। Getter विधियों का उपयोग ResultSet में तालिका के मान प्राप्त करने के लिए किया जाता है। उसके लिए, हमें या तो कॉलम इंडेक्स वैल्यू या कॉलम नाम पास करना होगा।
ResultSet में निम्नलिखित गेट्टर तरीके हैं:
(int ColumnIndex): इसका उपयोग int डेटा प्रकार के रूप में निर्दिष्ट कॉलम इंडेक्स का मान प्राप्त करने के लिए किया जाता है।गेटर विधियाँ हैं सभी आदिम डेटा प्रकारों (बूलियन, लॉन्ग, डबल) और स्ट्रिंग के लिए भी ResultSet इंटरफ़ेस में। हम डेटाबेस से एक सरणी और बाइनरी प्रकार के डेटा भी प्राप्त कर सकते हैं। इसके लिए इसके तरीके भी हैं।
#3) सेटर/अपडेटर तरीके
ResultSet Updater तरीकों का इस्तेमाल करके हम डेटाबेस में वैल्यू को अपडेट कर सकते हैं। यह गेट्टर विधियों के समान है, लेकिन यहां हमें डेटाबेस में अपडेट करने के लिए विशेष कॉलम के लिए मान/डेटा पास करने की आवश्यकता है।
ResultSet में अपडेटर विधियां निम्नलिखित हैं: 3
- void updateInt(int ColumnIndex, int Value): इसका उपयोग निर्दिष्ट कॉलम इंडेक्स के मूल्य को int मान के साथ अपडेट करने के लिए किया जाता है।
- शून्य अपडेटफ्लोट (इंट कॉलमइंडेक्स, फ्लोट एफ): इसका उपयोग फ्लोट वैल्यू के साथ निर्दिष्ट कॉलम इंडेक्स के मूल्य को अपडेट करने के लिए किया जाता है।
- शून्य अपडेटडेट (इंट कॉलमइंडेक्स, दिनांक डी): इसका उपयोग निर्दिष्ट कॉलम इंडेक्स के मान को अपडेट करने के लिए किया जाता हैदिनांक मान के साथ।
- void updateInt(String ColumnName, int Value): इसका उपयोग दिए गए int मान के साथ निर्दिष्ट कॉलम के मान को अपडेट करने के लिए किया जाता है।
- शून्य अद्यतन फ्लोट (स्ट्रिंग कॉलमनाम, फ्लोट एफ): इसका उपयोग निर्दिष्ट कॉलम के मान को दिए गए फ्लोट मान के साथ अद्यतन करने के लिए किया जाता है।
- Java.sql.date getDate (स्ट्रिंग) ColumnName): इसका उपयोग दिए गए दिनांक मान के साथ निर्दिष्ट कॉलम के मान को अपडेट करने के लिए किया जाता है।
सभी आदिम डेटा प्रकारों (बूलियन, लॉन्ग, डबल) और स्ट्रिंग के लिए अपडेटर विधियाँ हैं रिजल्टसेट इंटरफ़ेस में भी।
अपडेटर विधियाँ केवल रिजल्टसेट ऑब्जेक्ट में डेटा को अपडेट करती हैं। इन्सर्टरो या अपडेटरो मेथड को कॉल करने के बाद वैल्यू को डीबी में अपडेट किया जाएगा। , स्तंभ नाम या अनुक्रमणिका और अद्यतन करने के लिए मान पास करना। UpdateX मेथड में हम X की जगह किसी भी डेटा टाइप का इस्तेमाल कर सकते हैं। अब तक, हमने रिजल्टसेट ऑब्जेक्ट में डेटा को अपडेट किया है। DB में डेटा को अपडेट करने के लिए, हमें updateRow() विधि को कॉल करना होगा।
एक पंक्ति सम्मिलित करना:
हमें कर्सर को स्थानांतरित करने के लिए MoveToInsertRow() का उपयोग करने की आवश्यकता है एक नई पंक्ति डालने के लिए। हम इसे पहले ही नेविगेशन मेथड्स सेक्शन में कवर कर चुके हैं। अगला, हमें पंक्ति में डेटा जोड़ने के लिए अपडेटएक्स () विधि को कॉल करने की आवश्यकता है। हमें सभी कॉलमों के लिए डेटा प्रदान करना चाहिए अन्यथा यह उस विशेष के डिफ़ॉल्ट मान का उपयोग करेगाकॉलम।
डेटा अपडेट करने के बाद, हमें इन्सर्टरो () विधि को कॉल करने की आवश्यकता है। फिर कर्सर की स्थिति को उस पंक्ति पर वापस ले जाने के लिए MoveToCurrentRow() विधि का उपयोग करें, जिस पर हम नई पंक्ति डालने से पहले थे।
ResultSet उदाहरण:
package com.STH.JDBC; import java.sql.Connection; import java.sql.DatabaseMetaData; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; public class ResultSet_Example1 { public static void main(String[] args) throws ClassNotFoundException { // TODO Auto-generated method stub String select_query = "select empnum,lastName,firstName from employee_details"; String insert_query = "insert into employee_details values(?,?,?,?,?,?)"; Class.forName("oracle.jdbc.driver.OracleDriver"); //Connecting to Oracle DB try(Connection conn = DriverManager.getConnection("jdbc:oracle:thin:system/pass123@localhost:1521:XE")) { //Creating DatabaseMetaData object DatabaseMetaData dbmd = conn.getMetaData(); //Checking whether the driver supports scroll insensitive type and concur updatable boolean isSupportResultSetType = dbmd.supportsResultSetConcurrency(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE); if(isSupportResultSetType == true) { // Creating prepared Statement PreparedStatement pstatemnt1 = conn.prepareStatement(select_query,ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_UPDATABLE); ResultSet rs = pstatemnt1.executeQuery(select_query); //Moving the cursor to point last row of the table rs.last(); System.out.println("LAST ROW: Before inserting new Employee"); System.out.println("LAST ROW: EMPNUM = " + rs.getInt(1)); System.out.println("\n EMP NUM = " + rs.getInt("empNum") + "\n LAST NAME = "+ rs.getString(2)+"\n FIRST NAME = " + rs.getString(3)); // Setting the values to insert in the EMPLOYEE_DETAILS Table //Moving the cursor to point insert a row to table rs.moveToInsertRow(); //Update EMPNUM value rs.updateInt(1, 1017); //Update LAST NAME value rs.updateString(2, "Bond"); //Update FIRST NAME value rs.updateString(3, "James"); //Insert a new row rs.insertRow(); //Moving the cursor to point 5th row rs.absolute(5); System.out.println("Befor Updating EMPNUM of the 5th ROW"); System.out.println("\n EMP NUM = " + rs.getInt("empNum") + "\n LAST NAME = "+ rs.getString(2)+"\n FIRST NAME = " + rs.getString(3)); System.out.println(" Updating EMP id of the 5th EMPLOYEE"); //Updating EMPNUM of 5th row rs.updateInt(1,3005); rs.updateRow(); System.out.println("\n EMP NUM = " + rs.getInt("empNum") + "\n LAST NAME = "+ rs.getString(2)+"\n FIRST NAME = " + rs.getString(3)); //Moving the cursor to point last row rs.last(); System.out.println("LAST ROW: EMPNUM = " + rs.getInt(1)); System.out.println("\n EMP NUM = " + rs.getInt("empNum") + "\n LAST NAME = "+ rs.getString(2)+"\n FIRST NAME = " + rs.getString(3)); } } catch (SQLException e) { e.printStackTrace(); } } }
आउटपुट:
व्याख्या:
उपरोक्त प्रोग्राम में हमने सबसे पहले जो किया है, उसे स्टोर किया है SELECT query का उपयोग करके ResultSet ऑब्जेक्ट में Employee_details तालिका का डेटा। फिर, हमने ResultSet की अंतिम () विधि का उपयोग करके कर्मचारी_ विवरण तालिका में अंतिम पंक्ति का डेटा प्रदर्शित किया। MoveToInsertRow () विधि कर्सर को वर्तमान पंक्ति को इंगित करने के लिए बनाती है, अब वर्तमान पंक्ति अंतिम पंक्ति है। एक नई पंक्ति। निरपेक्ष () पद्धति का उपयोग करते हुए, हमने कर्सर को 5वीं पंक्ति की ओर इंगित करने के लिए बनाया। तालिका में पांचवें कर्मचारी की एक नई आईडी के साथ EMPNUM को अपडेट करने के लिए UpdateInt() विधि का उपयोग किया गया है। उसके बाद, यह जांचने के लिए डेटा प्रदर्शित किया गया कि EMPNUM अपडेट है या नहीं।
अंतिम() का उपयोग करके तालिका की अंतिम पंक्ति को इंगित करने के लिए कर्सर बनाएं और इसे प्रदर्शित करें। उपरोक्त तर्क को निष्पादित करने के लिए, हमें तैयार स्टेटमेंट विधि में ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE मान सेट करने की आवश्यकता है।
# 4) विविध तरीके 4>void Close(): इसका उपयोग ResultSet उदाहरण को बंद करने और खाली करने के लिए किया जाता हैरिज़ल्टसेट इंस्टेंस से जुड़े संसाधन।
ResultSetMetaData
मेटाडेटा क्या है?
मेटाडेटा मतलब डेटा के बारे में डेटा। इस इंटरफ़ेस का उपयोग करके, हम ResultSet के बारे में अधिक जानकारी प्राप्त करेंगे। यह java.sql पैकेज में उपलब्ध है। प्रत्येक ResultSet ऑब्जेक्ट एक ResultSetMetaData ऑब्जेक्ट से जुड़ा होता है।
इस ऑब्जेक्ट में कॉलम के गुणों का विवरण होगा जैसे कॉलम का डेटाटाइप, कॉलम का नाम, कॉलम की संख्या, टेबल का नाम, स्कीमा का नाम, आदि। हम ResultSet के getMetaData() मेथड का उपयोग करके ResultSetMetaData ऑब्जेक्ट प्राप्त कर सकते हैं।
ResultSetMetaData का सिंटैक्स:
PreparedStatement pstatemnt1 = conn.prepareStatement(insert_query); ResultSet rs1 = pstatemnt1.executeQuery(“Select * from EMPLOYEE_DETAILS”); ResultSetMetaData rsmd = rs.getMetaData();
ResultSetMetaData इंटरफ़ेस के महत्वपूर्ण तरीके:5
विधि का नाम | विवरण |
---|---|
स्ट्रिंग getColumnName(int column) | यह विशेष कॉलम का कॉलम नाम लौटाता है |
स्ट्रिंग getColumnTypeName(int column) | यह इसका डेटाटाइप लौटाता है विशेष कॉलम जिसे हमने एक पैरामीटर के रूप में पास किया है |
स्ट्रिंग getTableName(int column) | यह कॉलम का टेबल नाम लौटाता है |
स्ट्रिंग getSchemaName(int column) | यह |