हे ट्यूटोरियल डेटा पुनर्प्राप्त करण्यासाठी JDBC ResultSet कसे वापरायचे ते स्पष्ट करते. आम्ही उदाहरणांसह ResultSetMetaData आणि DatabaseMetaData इंटरफेसबद्दल देखील शिकू:
JDBC ड्रायव्हर मॅनेजर ट्यूटोरियल JDBC ट्युटोरियल मालिका मध्ये, आम्ही JDBC कसे वापरायचे ते शिकलो. ड्रायव्हर मॅनेजर आणि त्याच्या पद्धती, Java अॅप्लिकेशन्समधील JDBC PreparedStatement.
या ट्युटोरियलमध्ये, आपण JDBC मधील उर्वरित इंटरफेसची चर्चा करू. आम्ही आमच्या मागील ट्युटोरियलमध्ये स्टेटमेंट, प्रीपेर्ड स्टेटमेंट आणि कॉलेबल स्टेटमेंट इंटरफेस समाविष्ट केले आहेत.
येथे, आम्ही JDBC ResultSet, ResultSetMetaData आणि DatabaseMetaData इंटरफेस, त्यांच्या पद्धती आणि Java प्रोग्राममधील पद्धती कशा वापरायच्या याबद्दल शिकू.3
JDBC ResultSet Interface
ResultSet इंटरफेस java.sql पॅकेजमध्ये आहे. जावा प्रोग्राममधील SQL स्टेटमेंट्सच्या अंमलबजावणीनंतर डेटाबेस टेबलमधून परत आलेला डेटा संग्रहित करण्यासाठी याचा वापर केला जातो. ResultSet चा ऑब्जेक्ट निकाल डेटावर कर्सर पॉइंट राखतो. डीफॉल्टमध्ये, कर्सर निकाल डेटाच्या पहिल्या पंक्तीच्या आधी स्थित असतो.
पुढील() पद्धतीचा वापर कर्सरला पुढील दिशेने पुढे नेण्यासाठी केला जातो. आणखी रेकॉर्ड नसल्यास ते FALSE परत करेल. ते कोणत्याही स्टेटमेंट ऑब्जेक्ट्सचा वापर करून executeQuery() मेथडला कॉल करून डेटा पुनर्प्राप्त करते. हे स्टेटमेंट किंवा तयार स्टेटमेंट किंवा कॉलेबल स्टेटमेंट ऑब्जेक्ट असू शकते. तयार विधान, आणिस्तंभाच्या सारणीचे स्कीमा नाव मिळवते
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)); } } }
आउटपुट:
स्पष्टीकरण:
वरील प्रोग्राममध्ये, आम्ही ResultSetMetaData इंटरफेसमध्ये getColumnCount(),getColumnName(), getColumnTypeName(), getTableName() आणि getSchemaName() पद्धती लागू केल्या आहेत.
DatabaseMetaData
डेटाबेस मेटाडेटा इंटरफेस सारखी माहिती देतो. DatabaseName, Database version, इ.
डेटाबेस मेटाडेटा इंटरफेसच्या महत्त्वाच्या पद्धती:
पद्धतीचे नाव | वर्णन27 |
---|---|
स्ट्रिंग getDriverName() | ते JDBC ड्रायव्हरचे नाव देईल जे आम्ही आमच्या Java प्रोग्राममध्ये वापरत आहोत |
स्ट्रिंग getDriverVersion() | हे JDBC ड्राइव्हर आवृत्ती क्रमांक परत करते |
स्ट्रिंग getUserName() | हे आम्ही वापरत असलेल्या डेटाबेसचे वापरकर्तानाव परत करते |
स्ट्रिंग getDatabaseProductName() | ते परत करते आम्ही आहोत त्या डेटाबेसचे नाववापरून |
स्ट्रिंग getDatabaseProductVersion() | हे आम्ही वापरत असलेल्या डेटाबेसचा आवृत्ती क्रमांक परत करतो |
ResultSet getSchemas() | हे कनेक्ट केलेल्या डेटाबेसमध्ये उपलब्ध असलेल्या स्कीमाची नावे देते |
स्ट्रिंग getStringFunctions() | हे कनेक्ट केलेल्या डेटाबेसमध्ये उपलब्ध असलेल्या स्ट्रिंग फंक्शन्सची सूची परत करते |
स्ट्रिंग getTimeDateFunctions() | ते कनेक्ट केलेल्या डेटाबेसमध्ये उपलब्ध वेळ आणि तारीख फंक्शन्सची सूची मिळवते |
स्ट्रिंग getURL() | हे डेटाबेससाठी URL परत करते |
बूलियन isReadOnly() | डेटाबेस केवळ-वाचनीय मोडमध्ये आहे की नाही ते मिळवते |
बुलियन सपोर्ट बॅचअपडेट्स() | डेटाबेस बॅच अपडेटला सपोर्ट करते की नाही ते परत करते |
बूलियन सपोर्ट सेव्हपॉइंट्स() | डेटाबेस सेव्हपॉईंटला सपोर्ट करते की नाही ते परत करते |
बुलियन सपोर्ट स्टेटमेंटपूलिंग() | डेटाबेस स्टेटमेंट पूलिंगला सपोर्ट करते की नाही ते परत करते |
बूलियन सपोर्ट्सस्टोर्ड प्रक्रिया() | डेटाबेस संचयित प्रक्रियेस समर्थन देत आहे की नाही हे परत करते |
बूलियन सपोर्ट्सआउटर जॉइन्स() | डेटाबेस आऊटर जॉईनला सपोर्ट करतो की नाही हे दाखवते |
येथे, आम्ही 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(), supportsBatchUpdates(), supportsStatementPooling(), supportsSavepoints(), supports(DuResuter) पद्धत आणि समर्थन DatabaseMetaData इंटरफेस.
लक्षात घेण्यासारखे मुद्दे:
- जेडीबीसी रिझल्टसेट इंटरफेस डेटाबेसमधील डेटा संग्रहित करण्यासाठी आणि आमच्या जावा प्रोग्राममध्ये वापरण्यासाठी वापरला जातो.
- आम्ही updateXXX() पद्धती वापरून डेटा अपडेट करण्यासाठी ResultSet वापरू शकतो.
- ResultSet ऑब्जेक्ट कर्सरला निकाल डेटाच्या पहिल्या ओळीच्या आधी पॉइंट करतो. पुढील() पद्धतीचा वापर करून, आम्ही ResultSet द्वारे पुनरावृत्ती करू शकतो.
- आमच्याकडे ResultSet ऑब्जेक्टमध्ये पुढे जाण्यासाठी ResultSet च्या नॅव्हिगेशनल पद्धती आहेत
- ResultMetaData याचा वापर ResultSet बद्दल अधिक माहिती मिळवण्यासाठी केला जातो. कॉलमचे नाव, कॉलम्सची संख्या, कॉलमचा डेटाटाइप इ.
- डेटाबेस मेटडेटा आम्ही कनेक्ट केलेल्या डेटाबेसची माहिती मिळवण्यासाठी वापरला जातो
वारंवार विचारले जाणारे प्रश्न
प्रश्न #1) याचा काय उपयोग आहेResultSet?
उत्तर: ResultSet चा वापर DB वरून डेटा संग्रहित आणि पुनर्प्राप्त करण्यासाठी केला जातो. executeQuery() पद्धत कार्यान्वित झाल्यावर, ते ResultSet ऑब्जेक्ट परत करेल. लॉजिक करण्यासाठी आम्ही आमच्या प्रोग्राममध्ये रिझल्टसेट ऑब्जेक्ट वापरू शकतो.
प्र # 2) रिझल्टसेट रिकामा आहे की नाही हे कसे तपासायचे?
उत्तर: IsResultSet Empty तपासण्यासाठी length(), size() सारख्या पूर्वनिर्धारित पद्धती उपलब्ध नाहीत. पुनरावृत्ती करण्यासाठी आपण पुढील() पद्धत वापरू शकतो आणि जर ते खरे असेल तर ते रिकामे नाही, जर ते खोटे आले तर रिझल्टसेट रिकामा आहे.
प्र # 3) हे शक्य आहे का रिझल्टसेट null असू शकते?
उत्तर: नाही, executeQuery() पद्धत ResultSet ऑब्जेक्ट मिळवते जी कधीही शून्य असू शकत नाही.
प्रश्न #4) अपडेट करण्यायोग्य रिझल्टसेट म्हणजे काय?
उत्तर: अपडेट करण्यायोग्य रिझल्टसेट ऑब्जेक्टचा वापर कॉलममधील डेटा अपडेट करण्यासाठी, कॉलममध्ये डेटा घालण्यासाठी आणि पंक्ती हटवण्यासाठी केला जातो. रिझल्टसेट अपडेट करण्यायोग्य म्हणून बनवण्यासाठी, आम्हाला स्क्रोल प्रकार संवेदनशील किंवा असंवेदनशील आणि CONCUR प्रकार अपडेट करण्यायोग्य म्हणून बनवावा लागेल.
ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_UPDATABLE.
प्र # 5) कनेक्ट केलेले डेटाबेस नाव कसे मिळवायचे?
उत्तर: डेटाबेस मेटाडेटा ऑब्जेक्टची getDatabaseProductName() पद्धत आपण वापरू शकतो.
निष्कर्ष
या ट्युटोरियलमध्ये आपण काय आहेत याबद्दल चर्चा केली आहे. ResultSet, ResultSetMetaData आणि DatabaseMetaData इंटरफेस आणि त्यांच्या महत्त्वाच्या पद्धती सामान्यतः JDBC प्रोग्राममध्ये वापरल्या जातात. आम्ही पण पाहिले आहेResultSet वापरून DB मध्ये डेटा कसा अपडेट करायचा. ResultSetMetadata मध्ये ResultSet बद्दल माहिती असते जसे की कॉलमचे नाव, कॉलमची संख्या इ.
DatabaseMetaData मध्ये डेटाबेस माहिती असते.
स्टेटमेंट इंटरफेस
Statement statemnt1 = conn.createStatement(); ResultSet rs1 = statemnt1.executeQuery(“Select * from EMPLOYEE_DETAILS”);
तयार स्टेटमेंट इंटरफेस
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); }
ResultSet Types
डिफॉल्ट मध्ये, आम्ही ResultSet मधील डेटा/व्हॅल्यूज पुनरावृत्ती करू शकतो जे पुढे दिशेने कार्यान्वित केलेल्या SQL स्टेटमेंटचे आउटपुट म्हणून परत आले आहेत. आम्ही Scrollable ResultSet वापरून इतर दिशानिर्देशांमध्ये मूल्ये पुनरावृत्ती करू शकतो. स्टेटमेंट, प्रीपेर्ड स्टेटमेंट आणि कॉलेबल स्टेटमेंट ऑब्जेक्ट्स तयार करताना आम्ही रिझल्टसेटचा प्रकार आणि एकरूपता निर्दिष्ट करू शकतो.
रिझल्टसेटमध्ये 3 प्रकार आहेत. ते आहेत:
- TYPE_FORWARD_ONLY: हा डीफॉल्ट पर्याय आहे, जिथे कर्सर सुरुवातीपासून शेवटपर्यंत म्हणजेच पुढे दिशेने फिरतो.
- TYPE_SCROLL_INSENSITIVE: या प्रकारात, ते कर्सरला पुढे आणि मागे दोन्ही दिशांना हलवण्यास प्रवृत्त करेल. संचयित केलेल्या डेटाची पुनरावृत्ती करताना आम्ही डेटामध्ये कोणतेही बदल केल्यास, जर कोणी DB मध्ये डेटा बदलला तर तो डेटासेटमध्ये अद्यतनित होणार नाही. कारण डेटासेटमध्ये SQL क्वेरी रिटर्न केल्यापासूनचा डेटा असतोडेटा.
- TYPE_SCROLL_SENSITIVE: हे TYPE_SCROLL_INSENSITIVE सारखेच आहे, SQL क्वेरीने डेटा परत केल्यानंतर कोणीही डेटा अपडेट केल्यास फरक आहे, पुनरावृत्ती करताना डेटासेटमधील बदल प्रतिबिंबित करेल.
ResultSet Concurrency
ResultSet मध्ये समरूपतेचे 2 मोड आहेत. ते आहेत:
- ResultSet.CONCUR_READ_ONLY: हा डीफॉल्ट कॉन्करन्सी मोड आहे. आम्ही फक्त निकाल सेटमधील डेटा वाचू शकतो. अपडेट लागू होत नाही.
- ResultSet.CONCUR_UPDATABLE: आम्ही ResultSet ऑब्जेक्टमधील डेटा अपडेट करू शकतो.
काही डेटाबेस सर्वांसाठी समवर्ती मोडला सपोर्ट करत नाहीत परिणाम सेट प्रकार. त्या बाबतीत, ते supportsResultSetConcurrency() पद्धतीचा वापर करून आमच्या इच्छित प्रकार आणि समवर्ती मोडला समर्थन देतात की नाही हे तपासणे आवश्यक आहे.
ResultSet इंटरफेसमध्ये पद्धती
ResultSet पद्धतींच्या 4 श्रेणी आहेत. ते आहेत:
- नेव्हिगेशनल पद्धती
- Getter पद्धती
- सेटर पद्धती
- विविध पद्धती
प्रथम, आपण नेव्हिगेशनल मेथड्सवर चर्चा करू आणि नंतर पुढे जाऊ.
#1) नेव्हिगेशनल मेथड्स
ही पद्धत डेटासेटभोवती कर्सर हलवण्यासाठी वापरली जाते.
- बूलियन absolute(int row): हे कर्सरला निर्दिष्ट पंक्तीमध्ये हलविण्यासाठी वापरले जाते जे पॅरामीटरमध्ये नमूद केले आहे आणि ऑपरेशन यशस्वी झाल्यास सत्य परत करा अन्यथा खोटे परत करा.
- रिक्तafterLast(): हे ResultSet कर्सरला शेवटच्या पंक्तीनंतर हलवते.
- Void beforeFirst(): हे ResultSet कर्सरला पहिल्या पंक्तीच्या आधी हलवते.13
- बुलियन फर्स्ट(): हे रिझल्टसेट कर्सरला पहिल्या रांगेत जाण्यासाठी बनवते. जर ऑपरेशन यशस्वी झाले तर ते खरे आहे अन्यथा असत्य.
- बुलियन लास्ट(): हे रिझल्टसेट कर्सरला शेवटच्या पंक्तीवर जाण्यासाठी बनवते. जर ऑपरेशन यशस्वी झाले तर ते खरे आहे अन्यथा असत्य.
- बुलियन नेक्स्ट(): हे रिझल्टसेट कर्सरला पुढील पंक्तीवर जाण्यासाठी बनवते. अधिक रेकॉर्ड्स असल्यास ते सत्य आणि आणखी रेकॉर्ड नसल्यास असत्य दर्शविते.
- बुलियन मागील(): हे रिझल्टसेट कर्सरला मागील पंक्तीवर जाण्यासाठी बनवते. जर ऑपरेशन यशस्वी झाले तर ते खरे आहे अन्यथा असत्य.
- बुलियन सापेक्ष(): हे कर्सरला दिलेल्या पंक्तींच्या संख्येवर पुढे किंवा मागे दिशेने हलवते.
- Int getRow(): तो ResultSet ऑब्जेक्ट आता पॉइंट करत असलेला वर्तमान पंक्ती क्रमांक देतो.
- Void moveToCurrentRow(): ते कर्सरला परत वर हलवते. जर ती सध्या इन्सर्ट रोमध्ये असेल तर चालू पंक्ती.
- Void moveToInsertRow(): डेटाबेसमध्ये पंक्ती घालण्यासाठी ते कर्सरला विशिष्ट पंक्तीवर हलवते. हे वर्तमान कर्सर स्थान लक्षात ठेवते. त्यामुळे आपण इन्सर्टेशन नंतर कर्सरला वर्तमान पंक्तीमध्ये हलवण्यासाठी moveToCurrentRow() पद्धतीचा वापर करू शकतो.
या ट्युटोरियलमध्ये,सर्व प्रोग्राम्स Java मध्ये लिहिलेले आहेत. आम्ही Java 8 आवृत्ती आणि Oracle DB वापरली आहे.
>>तुम्ही येथून ओरॅकल सॉफ्टवेअर डाउनलोड करू शकता
>>तुम्ही जावा आवृत्ती 8 येथून डाउनलोड करू शकता
यामध्ये जावा इंस्टॉलेशन प्रक्रिया चरण-दर-चरण आहे.
जेडीबीसी परिणाम सेट उदाहरण कार्यक्रम:(नॅव्हिगेशनल पद्धतींचा वापर करून)
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)
स्पष्टीकरण:
वरील प्रोग्रॅममध्ये आपण first(), last(), beforeFirst(), afterLast(), next( कार्यान्वित केले आहे. ), मागील(), absolute(), सापेक्ष() आणि getRow() पद्धती ResultSet मध्ये. या पद्धती वापरण्यासाठी आम्ही ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE मूल्ये तयार स्टेटमेंट पद्धतीमध्ये सेट करतो.
पुढे, आम्ही ResultSet मध्ये गेटर पद्धती काय आहेत यावर चर्चा करू:
#2) Getter Methods
ResultSet ने टेबलचा डेटा डेटाबेसमधून संग्रहित केला आहे. रिझल्टसेटमध्ये टेबलची व्हॅल्यू मिळवण्यासाठी गेटर पद्धती वापरल्या जातात. त्यासाठी, आम्हाला कॉलम इंडेक्स व्हॅल्यू किंवा कॉलम नेम पास करावे लागेल.
रिझल्टसेटमध्ये खालील गेटर पद्धती आहेत:
- int getInt (int ColumnIndex): निर्दिष्ट कॉलम इंडेक्सचे मूल्य int डेटा प्रकार म्हणून मिळवण्यासाठी वापरले जाते.
- float getFloat(int ColumnIndex): ते मिळविण्यासाठी वापरले जाते फ्लोट डेटा प्रकार म्हणून निर्दिष्ट स्तंभ निर्देशांकाचे मूल्य.
- java.sql.dategetDate(int ColumnIndex): तारखेचे मूल्य म्हणून निर्दिष्ट स्तंभ निर्देशांकाचे मूल्य मिळविण्यासाठी याचा वापर केला जातो.
- int getInt(String ColumnName): हे मिळविण्यासाठी वापरले जाते इंट डेटा प्रकार म्हणून निर्दिष्ट कॉलमचे मूल्य.
- float getFloat(String ColumnName): फ्लोट डेटा प्रकार म्हणून निर्दिष्ट कॉलमचे मूल्य मिळविण्यासाठी याचा वापर केला जातो.13
- Java.sql.date getDate(String ColumnName): तारखेचे मूल्य म्हणून निर्दिष्ट कॉलमचे मूल्य मिळविण्यासाठी याचा वापर केला जातो.
गेटर पद्धती आहेत सर्व आदिम डेटा प्रकारांसाठी (बूलियन, लांब, दुहेरी) आणि स्ट्रिंग देखील ResultSet इंटरफेसमध्ये. आम्ही डेटाबेसमधून अॅरे आणि बायनरी प्रकारचा डेटा देखील मिळवू शकतो. त्यासाठी पद्धतीही आहेत.
#3) सेटर/अपडेटर पद्धती
आम्ही रिझल्टसेट अपडेटर पद्धती वापरून डेटाबेसमधील मूल्य अपडेट करू शकतो. हे गेटर पद्धतींसारखेच आहे, परंतु डेटाबेसमध्ये अद्यतनित करण्यासाठी येथे आपल्याला विशिष्ट स्तंभासाठी मूल्य/डेटा पास करणे आवश्यक आहे.
रिझल्टसेटमध्ये खालील अपडेटर पद्धती आहेत: 3
- void updateInt(int ColumnIndex, int Value) updateFloat(int ColumnIndex, float f): हे निर्दिष्ट स्तंभ निर्देशांकाचे मूल्य फ्लोट मूल्यासह अद्यतनित करण्यासाठी वापरले जाते.
- void updateDate(int ColumnIndex, Date d): निर्दिष्ट कॉलम इंडेक्सचे मूल्य अपडेट करण्यासाठी याचा वापर केला जातोतारीख मूल्यासह.
- void updateInt(String ColumnName, int Value) void updateFloat(String ColumnName, float f): निर्दिष्ट कॉलमचे मूल्य दिलेल्या फ्लोट मूल्यासह अपडेट करण्यासाठी वापरले जाते.
- Java.sql.date getDate(String) स्तंभाचे नाव: दिलेल्या तारखेच्या मूल्यासह निर्दिष्ट स्तंभाचे मूल्य अद्यतनित करण्यासाठी वापरले जाते.
सर्व आदिम डेटा प्रकार (बूलियन, लांब, दुहेरी) आणि स्ट्रिंगसाठी अपडेटर पद्धती आहेत. ResultSet इंटरफेसमध्ये देखील.
अपडेटर पद्धती फक्त ResultSet ऑब्जेक्टमधील डेटा अपडेट करतात. insertRow किंवा updateRow पद्धतीला कॉल केल्यानंतर मूल्ये DB मध्ये अपडेट केली जातील.
एक पंक्ती अपडेट करणे:
आम्ही updateX() पद्धतींवर कॉल करून डेटा सलगपणे अपडेट करू शकतो. , स्तंभाचे नाव किंवा अनुक्रमणिका आणि मूल्ये अद्यतनित करण्यासाठी पास करणे. आम्ही updateX पद्धतीत X च्या जागी कोणताही डेटा प्रकार वापरू शकतो. आत्तापर्यंत, आम्ही ResultSet ऑब्जेक्टमधील डेटा अपडेट केला आहे. DB मधील डेटा अपडेट करण्यासाठी, आम्हाला updateRow() पद्धत कॉल करावी लागेल.
एक पंक्ती घालणे:
आम्हाला कर्सर हलवण्यासाठी moveToInsertRow() वापरावे लागेल. नवीन पंक्ती घालण्यासाठी. आम्ही हे आधीच नेव्हिगेशन पद्धती विभागात समाविष्ट केले आहे. पुढे, पंक्तीमध्ये डेटा जोडण्यासाठी आम्हाला updateX() पद्धत कॉल करावी लागेल. आम्ही सर्व स्तंभांसाठी डेटा प्रदान केला पाहिजे अन्यथा ते त्या विशिष्टचे डीफॉल्ट मूल्य वापरेलकॉलम.
डेटा अपडेट केल्यानंतर, आम्हाला insertRow() पद्धत कॉल करावी लागेल. त्यानंतर आम्ही नवीन पंक्ती घालण्यास सुरुवात करण्यापूर्वी कर्सरची स्थिती परत ज्या पंक्तीवर होती त्या पंक्तीवर जाण्यासाठी moveToCurrentRow() पद्धत वापरा.
निकाल सेट उदाहरण:
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 क्वेरी वापरून ResultSet ऑब्जेक्टमधील Employee_details टेबलचा डेटा. त्यानंतर, आम्ही ResultSet च्या शेवटच्या() पद्धतीचा वापर करून कर्मचारी_तपशील टेबलमध्ये शेवटच्या पंक्तीचा डेटा प्रदर्शित केला. moveToInsertRow() पद्धत कर्सरला वर्तमान पंक्ती दर्शवते, आता वर्तमान पंक्ती ही शेवटची पंक्ती आहे.
अपडेटXXX()पद्धती पंक्तीची मूल्ये अपडेट करण्यासाठी वापरली जातात आणि insertRow() पद्धतीमध्ये डेटा समाविष्ट केला आहे. एक नवीन पंक्ती. absolute() पद्धतीचा वापर करून, आम्ही कर्सरला 5 व्या पंक्तीकडे निर्देशित केले. UpdateInt() पद्धत टेबलमधील 5व्या कर्मचाऱ्याच्या नवीन आयडीसह EMPNUM अपडेट करण्यासाठी वापरली गेली आहे. त्यानंतर, EMPNUM अपडेट केले आहे की नाही हे तपासण्यासाठी डेटा प्रदर्शित केला.
लास्ट() वापरून टेबलची शेवटची पंक्ती दर्शवण्यासाठी कर्सर तयार केला आणि तो प्रदर्शित केला. वरील तर्क पूर्ण करण्यासाठी, आम्हाला ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE मूल्ये तयार स्टेटमेंट पद्धतीमध्ये सेट करावी लागतील.
#4) विविध पद्धती
- void close(): याचा वापर रिझल्टसेट इन्स्टन्स बंद करण्यासाठी आणि मोकळा करण्यासाठी केला जातो.ResultSet उदाहरणाशी संबंधित संसाधने.
- ResultSetMetaData getMetaData(): ते ResultSetMetaData उदाहरण देते. यात क्वेरी आउटपुटच्या कॉलम्सचा प्रकार आणि गुणधर्म याबद्दल माहिती आहे. आम्ही पुढील विभागात ResultSetMetaData बद्दल अधिक जाणून घेऊ.
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 इंटरफेसच्या महत्त्वाच्या पद्धती:
पद्धतीचे नाव | वर्णन |
---|---|
स्ट्रिंग getColumnName(int column) | ते विशिष्ट कॉलमचे कॉलमचे नाव दाखवते |
स्ट्रिंग getColumnTypeName(int column) | ते डेटाटाइप दाखवते विशिष्ट कॉलम जो आपण पॅरामीटर म्हणून पास केला आहे |
स्ट्रिंग getTableName(int column) | तो कॉलमचे टेबल नाव देतो |
स्ट्रिंग getSchemaName(int column) | ते |