यस ट्यूटोरियलले डेटा पुन: प्राप्त गर्न JDBC ResultSet कसरी प्रयोग गर्ने भनेर बताउँछ। हामी उदाहरणहरू सहित ResultSetMetaData र DatabaseMetaData इन्टरफेसहरू बारे पनि जान्नेछौं:
JDBC ड्राइभर प्रबन्धक JDBC ट्युटोरियल श्रृंखला को ट्युटोरियलमा, हामीले JDBC कसरी प्रयोग गर्ने भनेर सिकेका छौं। ड्राइभर प्रबन्धक र यसको विधिहरू, जाभा अनुप्रयोगहरूमा JDBC PreparedStatement।
यस ट्युटोरियलमा, हामी JDBC मा बाँकी इन्टरफेसहरू छलफल गर्नेछौं। हामीले हाम्रो अघिल्लो ट्युटोरियलहरूमा स्टेटमेन्ट, प्रिपर्ड स्टेटमेन्ट, र CallableStatement इन्टरफेसहरू कभर गरेका छौं।
यहाँ, हामी JDBC ResultSet, ResultSetMetaData, र DatabaseMetaData इन्टरफेसहरू, तिनीहरूका विधिहरू र जाभा प्रोग्राममा विधिहरू कसरी प्रयोग गर्ने भन्ने बारे सिक्नेछौं।
JDBC ResultSet Interface
ResultSet इन्टरफेस java.sql प्याकेजमा अवस्थित छ। यो जाभा कार्यक्रममा SQL कथनहरूको कार्यान्वयन पछि डाटाबेस तालिकाबाट फर्काइएका डाटा भण्डारण गर्न प्रयोग गरिन्छ। ResultSet को वस्तुले परिणाम डेटामा कर्सर पोइन्ट राख्छ। पूर्वनिर्धारित रूपमा, परिणाम डेटाको पहिलो पङ्क्तिको अगाडि कर्सरको स्थान हुन्छ।
अर्को दिशामा कर्सरलाई अर्को स्थानमा सार्न अर्को() विधि प्रयोग गरिन्छ। यदि त्यहाँ कुनै थप रेकर्डहरू छैनन् भने यसले FALSE फर्काउनेछ। यसले कुनै पनि कथन वस्तुहरू प्रयोग गरेर executeQuery() विधिलाई कल गरेर डाटा पुन: प्राप्त गर्दछ। यो कथन वा PreparedStatement वा CallableStatement वस्तु हुन सक्छ। तयार कथन, रस्तम्भको तालिकाको स्कीमा नाम फर्काउँछ
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
DatabaseMetaData ले इन्टरफेसको बारेमा जानकारी दिन्छ। डाटाबेसनाम, डाटाबेस संस्करण, र यस्तै अन्य।
डाटाबेस मेटाडाटा इन्टरफेसका महत्त्वपूर्ण विधिहरू:
विधिको नाम | विवरण27 |
---|---|
स्ट्रिङ getDriverName() | यसले JDBC ड्राइभरको नाम फर्काउनेछ जुन हामीले हाम्रो जाभा कार्यक्रममा प्रयोग गरिरहेका छौं |
स्ट्रिङ getDriverVersion() | यसले JDBC ड्राइभर संस्करण नम्बर फर्काउँछ |
स्ट्रिङ getUserName() | यसले हामीले प्रयोग गरिरहेको डाटाबेसको प्रयोगकर्ता नाम फर्काउँछ |
स्ट्रिङ getDatabaseProductName() | यसले फर्काउँछ डाटाबेसको नाम जुन हामी छौंप्रयोग गरेर |
स्ट्रिङ getDatabaseProductVersion() | यसले हामीले प्रयोग गरिरहेको डाटाबेसको संस्करण नम्बर फर्काउँछ |
ResultSet getSchemas() | यसले जडित डाटाबेसमा उपलब्ध स्किमाका नामहरू फर्काउँछ |
स्ट्रिङ getStringFunctions() | यसले जडान गरिएको डाटाबेसमा उपलब्ध स्ट्रिङ प्रकार्यहरूको सूची फर्काउँछ |
स्ट्रिङ getTimeDateFunctions() | यो जडान गरिएको डाटाबेसमा उपलब्ध समय र मिति प्रकार्यहरूको सूची फर्काउँछ |
स्ट्रिङ getURL() | यसले डाटाबेसको लागि URL फर्काउँछ |
बुलियन isReadOnly() | यसले डाटाबेस पढ्ने मात्र मोडमा छ कि छैन फर्काउँछ |
बुलियन समर्थन ब्याचअपडेट्स() | यसले डाटाबेस समर्थन ब्याच अपडेटहरू फर्काउँछ कि |
बुलियन समर्थन सेभपोइन्ट्स() | यसले डाटाबेसले सेभपोइन्टहरूलाई समर्थन गर्छ कि गर्दैन फर्काउँछ |
बुलियन समर्थन स्टेटमेन्टपुलिंग() | यसले डाटाबेसले स्टेटमेन्ट पूलिङलाई समर्थन गर्छ कि गर्दैन भनेर फर्काउँछ |
बुलियन सपोर्ट्स स्टोरेड प्रक्रियाहरू() | यसले डाटाबेसले भण्डारण गरिएका प्रक्रियाहरूलाई समर्थन गर्छ कि गर्दैन भनेर फर्काउँछ |
बुलियन समर्थन गर्दछOuterJoins() | यसले डाटाबेसले बाहिरी जोइनलाई समर्थन गर्छ कि गर्दैन भनेर फर्काउँछ |
यहाँ, हामीले 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(), supportsSavePoints(), supportsducers(products) र मेथडमा समर्थन गर्दछ। DatabaseMetaData इन्टरफेस।
नोट गर्नुपर्ने बिन्दुहरू:
- JDBC ResultSet इन्टरफेस डाटाबेसबाट डाटा भण्डारण गर्न र हाम्रो जाभा कार्यक्रममा प्रयोग गर्न प्रयोग गरिन्छ।
- हामी updateXXX() विधिहरू प्रयोग गरेर डाटा अपडेट गर्न ResultSet प्रयोग गर्न सक्छौं।
- ResultSet वस्तुले नतिजा डेटाको पहिलो पङ्क्तिको अगाडि कर्सरलाई पोइन्ट गर्छ। अर्को() विधि प्रयोग गरेर, हामी ResultSet मार्फत पुनरावृत्ति गर्न सक्छौं।
- हामीसँग ResultSet वस्तुमा अगाडि बढ्नको लागि ResultSet को नेभिगेसनल विधिहरू छन्
- ResultMetaData को ResultSet बारे थप जानकारी प्राप्त गर्न प्रयोग गरिन्छ। स्तम्भको नाम, स्तम्भहरूको संख्या, स्तम्भको डाटाटाइप, आदि।
- डेटाबेस मेटडेटा हामीले जडान गरेको डाटाबेसको बारेमा जानकारी प्राप्त गर्न प्रयोग गरिन्छ
बारम्बार सोधिने प्रश्नहरू
प्रश्न # 1) यसको उपयोग के होResultSet?
उत्तर: ResultSet DB बाट डाटा भण्डारण र पुन: प्राप्त गर्न प्रयोग गरिन्छ। जब executeQuery() विधि कार्यान्वयन हुन्छ, यसले ResultSet वस्तु फिर्ता गर्नेछ। हामी तर्क प्रदर्शन गर्न हाम्रो कार्यक्रममा त्यो ResultSet वस्तु प्रयोग गर्न सक्छौं।
Q #2) ResultSet खाली छ वा छैन भनेर कसरी जाँच गर्ने?
उत्तर: IsResultSet Empty जाँच गर्न लम्बाइ(), साइज() जस्ता पूर्वनिर्धारित विधिहरू उपलब्ध छैनन्। हामी पुनरावृत्ति गर्न को लागी next() विधि प्रयोग गर्न सक्छौं र यदि यो True फर्काउँछ भने, यो खाली छैन, यदि यसले False फर्काउँछ भने परिणामसेट खाली छ।
प्रश्न #3) के यो सम्भव छ कि ResultSet? शून्य हुन सक्छ?
उत्तर: होइन, executeQuery() विधिले ResultSet वस्तु फर्काउँछ जुन कहिल्यै शून्य हुन सक्दैन।
प्रश्न #4) अपडेटयोग्य रिजल्टसेट भनेको के हो?
उत्तर: अद्यावधिक गर्न मिल्ने ResultSet वस्तु स्तम्भमा डाटा अपडेट गर्न, स्तम्भहरूमा डाटा घुसाउन र पङ्क्तिहरू मेटाउन प्रयोग गरिन्छ। नतिजा सेटलाई अपडेट गर्न मिल्ने बनाउनको लागि, हामीले स्क्रोल प्रकारलाई संवेदनशील वा असंवेदनशील र CONCUR टाइपलाई अपडेट गर्न मिल्ने बनाउन आवश्यक छ।
ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_UPDATABLE.
प्रश्न #5) जडान भएको डाटाबेस नाम कसरी प्राप्त गर्ने?
उत्तर: हामी DatabaseMetaData वस्तुको getDatabaseProductName() विधि प्रयोग गर्न सक्छौं।
निष्कर्ष
यस ट्युटोरियलमा हामीले के हो भनेर छलफल गरेका छौं। ResultSet, ResultSetMetaData, र DatabaseMetaData इन्टरफेसहरू र तिनीहरूका महत्त्वपूर्ण विधिहरू सामान्यतया JDBC कार्यक्रमहरूमा प्रयोग गरिन्छ। हामीले पनि देखेका छौंResultSet प्रयोग गरेर DB मा डाटा कसरी अपडेट गर्ने। ResultSetMetadata मा ResultSet को बारेमा जानकारी हुन्छ जस्तै स्तम्भको नाम, स्तम्भ गणना, र यस्तै।
DatabaseMetaData मा डाटाबेस जानकारी हुन्छ।
स्टेटमेन्ट इन्टरफेस
Statement statemnt1 = conn.createStatement(); ResultSet rs1 = statemnt1.executeQuery(“Select * from EMPLOYEE_DETAILS”);
PreparedStatement Interface
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 स्टेटमेन्टको आउटपुटको रूपमा फर्किएको छ। हामी स्क्रोलयोग्य नतिजा सेट प्रयोग गरेर अन्य दिशाहरूमा मानहरू दोहोर्याउन सक्छौं। हामीले स्टेटमेन्ट, PreparedStatement, र CallableStatement वस्तुहरू सिर्जना गर्दा ResultSet को प्रकार र concurrency निर्दिष्ट गर्न सक्छौं।
ResultSet मा ३ प्रकारका हुन्छन्। ती हुन्:
- TYPE_FORWARD_ONLY: यो पूर्वनिर्धारित विकल्प हो, जहाँ कर्सर सुरुदेखि अन्त्यसम्म सर्छ अर्थात अगाडिको दिशामा।
- TYPE_SCROLL_INSENSITIVE: यस प्रकारमा, यसले कर्सरलाई अगाडि र पछाडि दुवै दिशामा सार्नको लागि बनाउँछ। यदि हामीले भण्डारण गरिएको डाटा दोहोर्याउने क्रममा डाटामा कुनै परिवर्तन गर्छौं भने यो डाटासेटमा अपडेट हुँदैन यदि कसैले DB मा डाटा परिवर्तन गर्दछ। किनभने डाटासेटमा SQL क्वेरीले रिटर्न गरेको समयदेखिको डाटा हुन्छडाटा।
- TYPE_SCROLL_SENSITIVE: यो TYPE_SCROLL_INSENSITIVE सँग मिल्दोजुल्दो छ, यदि कसैले SQL क्वेरीले डाटा फिर्ता गरिसकेपछि डाटा अपडेट गर्छ भने, यो दोहोर्याउँदा डाटासेटमा भएका परिवर्तनहरू प्रतिबिम्बित हुनेछ।
ResultSet Concurrency
ResultSet मा कन्करन्सीको २ मोडहरू छन्। तिनीहरू हुन्:
- ResultSet.CONCUR_READ_ONLY: यो पूर्वनिर्धारित समवर्ती मोड हो। हामी नतिजा सेटमा मात्र डाटा पढ्न सक्छौं। अद्यावधिक लागू हुँदैन।
- ResultSet.CONCUR_UPDATABLE: हामी ResultSet वस्तुमा डाटा अपडेट गर्न सक्छौँ।
केही डाटाबेसले सबैका लागि समवर्ती मोडलाई समर्थन गर्दैन। परिणाम सेट प्रकारहरू। त्यस अवस्थामा, हामीले supportsResultSetConcurrency() विधि प्रयोग गरेर हाम्रो वांछित प्रकार र समवर्ती मोडलाई समर्थन गर्छ कि गर्दैन भनेर जाँच गर्न आवश्यक छ।
ResultSet इन्टरफेसमा विधिहरू
ResultSet विधिहरूका 4 कोटीहरू छन्। ती हुन्:
- नेभिगेसनल विधिहरू
- Getter विधिहरू
- सेटर विधिहरू
- विविध विधिहरू
पहिले, हामी नेभिगेसनल विधिहरू बारे छलफल गर्नेछौं र त्यसपछि अगाडि बढ्नेछौं।
#1) नेभिगेसनल विधिहरू
डेटासेटको वरिपरि कर्सर सार्न यो विधि प्रयोग गरिन्छ।
- बुलियन absolute(int row): यो कर्सरलाई निर्दिष्ट पङ्क्तिमा सार्न प्रयोग गरिन्छ जुन प्यारामिटरमा उल्लेख गरिएको छ र यदि अपरेशन सफल भएमा true फर्काउँछ अन्यथा false फर्काउँछ।
- शून्यafterLast(): यसले ResultSet कर्सरलाई अन्तिम पङ्क्ति पछि सार्न बनाउँछ।
- Void beforeFirst(): यसले ResultSet कर्सरलाई पहिलो पङ्क्तिको अगाडि सार्न बनाउँछ।
- बुलियन पहिलो(): यसले ResultSet कर्सरलाई पहिलो पङ्क्तिमा सार्न बनाउँछ। यदि अपरेशन सफल भएमा यो ट्रु फर्काउँछ अन्यथा False।
- Boolan last(): यसले ResultSet कर्सरलाई अन्तिम पङ्क्तिमा सार्न बनाउँछ। यदि अपरेसन सफल भएमा यो True फर्काउँछ अन्यथा False।
- Boolan next(): यसले ResultSet कर्सरलाई अर्को पङ्क्तिमा सार्न बनाउँछ। यदि त्यहाँ धेरै रेकर्डहरू छन् भने यसले True र थप रेकर्डहरू नभएमा False फर्काउँछ।
- बुलियन अघिल्लो(): यसले ResultSet कर्सरलाई अघिल्लो पङ्क्तिमा सार्न बनाउँछ। यदि अपरेशन सफल भएमा यो ट्रु फर्काउँछ अन्यथा False।
- बुलियन सापेक्ष(): यसले कर्सरलाई पङ्क्तिहरूको दिइएको संख्यामा अगाडि वा पछाडि दिशामा सार्छ।
- Int getRow(): यसले ResultSet वस्तुले अहिले संकेत गरिरहेको हालको पङ्क्ति नम्बर फर्काउँछ।
- Void moveToCurrentRow(): यसले कर्सरलाई फर्काउँछ हालको पङ्क्ति यदि हाल इन्सर्ट पङ्क्तिमा छ भने।
- Void moveToInsertRow(): यसले कर्सरलाई डाटाबेसमा पङ्क्ति घुसाउनको लागि निर्दिष्ट पङ्क्तिमा सार्छ। यसले वर्तमान कर्सर स्थान सम्झन्छ। त्यसैले हामी इनसर्सन पछि कर्सरलाई हालको पङ्क्तिमा सार्न moveToCurrentRow() विधि प्रयोग गर्न सक्छौं।
यस ट्यूटोरियलमा,सबै प्रोग्रामहरू Java मा लेखिएका छन्। हामीले Java 8 संस्करण र Oracle DB प्रयोग गरेका छौं।
>>तपाईं यहाँबाट ओरेकल सफ्टवेयर डाउनलोड गर्न सक्नुहुन्छ
>>तपाईं यहाँबाट जाभा संस्करण 8 डाउनलोड गर्न सक्नुहुन्छ
यससँग चरण-दर-चरण Java स्थापना प्रक्रिया छ।
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(); } } }
आउटपुट:
कर्मचारी_विवरण तालिकामा डाटा
19>
स्पष्टीकरण:
माथिको कार्यक्रममा हामीले first(), last(), beforeFirst(), afterLast(), next( लाई कार्यान्वयन गरेका छौं। ), अघिल्लो(), absolute(), रिश्तेदार() र getRow() विधिहरू ResultSet मा। यी विधिहरू प्रयोग गर्न हामीले ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE मानहरू तयारी स्टेटमेन्ट विधिमा सेट गर्छौं।
अर्को, हामी परिणामसेटमा गेटर विधिहरू के हुन् भनेर छलफल गर्नेछौं:
#2) Getter Methods
ResultSet ले तालिकाको डाटा डाटाबेसबाट भण्डार गरेको छ। परिणामसेटमा तालिकाको मानहरू प्राप्त गर्न गेटर विधिहरू प्रयोग गरिन्छ। त्यसको लागि, हामीले स्तम्भ अनुक्रमणिका मान वा स्तम्भको नाम पास गर्नुपर्छ।
निम्न परिणामसेटमा प्राप्त गर्ने विधिहरू छन्:
- int getInt (int ColumnIndex): यसलाई int डेटा प्रकारको रूपमा निर्दिष्ट स्तम्भ अनुक्रमणिकाको मान प्राप्त गर्न प्रयोग गरिन्छ।
- float getFloat(int ColumnIndex): यसलाई प्राप्त गर्न प्रयोग गरिन्छ। फ्लोट डेटा प्रकारको रूपमा निर्दिष्ट स्तम्भ अनुक्रमणिकाको मान।
- java.sql.dategetDate(int ColumnIndex): यो मिति मानको रूपमा निर्दिष्ट स्तम्भ अनुक्रमणिकाको मान प्राप्त गर्न प्रयोग गरिन्छ।
- int getInt(String ColumnName): यसलाई प्राप्त गर्न प्रयोग गरिन्छ। int डेटा प्रकारको रूपमा निर्दिष्ट स्तम्भको मान।
- float getFloat(String ColumnName): यो फ्लोट डेटा प्रकारको रूपमा निर्दिष्ट स्तम्भको मान प्राप्त गर्न प्रयोग गरिन्छ।
- Java.sql.date getDate(String ColumnName): यो मिति मानको रूपमा निर्दिष्ट स्तम्भको मान प्राप्त गर्न प्रयोग गरिन्छ।
गेटर विधिहरू छन्। सबै आदिम डेटा प्रकारहरूका लागि (बुलियन, लामो, डबल) र स्ट्रिङ पनि ResultSet इन्टरफेसमा। हामी डाटाबेसबाट पनि एरे र बाइनरी प्रकारको डाटा प्राप्त गर्न सक्छौं। यसमा त्यसका लागि विधिहरू पनि छन्।
#3) Setter/Updater Methods
हामी ResultSet Updater विधिहरू प्रयोग गरेर डाटाबेसमा मान अद्यावधिक गर्न सक्छौँ। यो गेटर विधिहरू जस्तै हो, तर यहाँ हामीले डाटाबेसमा अद्यावधिक गर्न विशेष स्तम्भको लागि मान/डेटा पास गर्नुपर्छ।
निम्न परिणामसेटमा अद्यावधिक गर्ने विधिहरू छन्: 3
- void updateInt(int ColumnIndex, int Value): यो int मानको साथ निर्दिष्ट स्तम्भ अनुक्रमणिकाको मान अद्यावधिक गर्न प्रयोग गरिन्छ।
- void updateFloat(int ColumnIndex, float f): यो फ्लोट मानसँग निर्दिष्ट स्तम्भ अनुक्रमणिकाको मान अद्यावधिक गर्न प्रयोग गरिन्छ।
- void updateDate(int ColumnIndex, Date d): यो निर्दिष्ट स्तम्भ सूचकांक को मूल्य अद्यावधिक गर्न प्रयोग गरिन्छमिति मानसँग।
- void updateInt(String ColumnName, int Value): यो दिइएको int मानसँग निर्दिष्ट स्तम्भको मान अद्यावधिक गर्न प्रयोग गरिन्छ।
- void updateFloat(String ColumnName, float f): यो दिइएको फ्लोट मानसँग निर्दिष्ट स्तम्भको मान अद्यावधिक गर्न प्रयोग गरिन्छ।
- Java.sql.date getDate(String) ColumnName): यो दिइएको मिति मानसँग निर्दिष्ट स्तम्भको मान अद्यावधिक गर्न प्रयोग गरिन्छ।
सबै आदिम डेटा प्रकारहरू (बुलियन, लामो, डबल) र स्ट्रिङका लागि अपडेटर विधिहरू छन्। ResultSet इन्टरफेसमा पनि।
अपडेटर विधिहरूले मात्र ResultSet वस्तुमा डाटा अपडेट गर्दछ। insertRow वा UpdateRow विधिलाई कल गरेपछि मानहरू DB मा अद्यावधिक हुनेछन्।
पङ्क्ति अपडेट गर्दै:
हामी updateX() विधिहरूमा कल गरेर डेटालाई पङ्क्तिमा अपडेट गर्न सक्छौं। , स्तम्भ नाम वा अनुक्रमणिका पास गर्दै, र अद्यावधिक गर्न मानहरू। हामी updateX विधिमा X को सट्टा कुनै पनि डाटा प्रकार प्रयोग गर्न सक्छौं। अहिले सम्म, हामीले ResultSet वस्तुमा डाटा अपडेट गरेका छौं। DB मा डाटा अपडेट गर्न, हामीले updateRow() विधिलाई कल गर्नुपर्छ।
एक पङ्क्ति सम्मिलित गर्दै:
हामीले कर्सर सार्न moveToInsertRow() प्रयोग गर्न आवश्यक छ। नयाँ पङ्क्ति सम्मिलित गर्न। हामीले यसलाई नेभिगेसन विधि खण्डमा पहिले नै कभर गरिसकेका छौं। अर्को, हामीले पङ्क्तिमा डाटा थप्नको लागि updateX() विधि कल गर्न आवश्यक छ। हामीले सबै स्तम्भहरूको लागि डेटा प्रदान गर्नुपर्छ अन्यथा यसले त्यो विशेषको पूर्वनिर्धारित मान प्रयोग गर्नेछस्तम्भ।
डेटा अद्यावधिक गरेपछि, हामीले insertRow() विधिलाई कल गर्नुपर्छ। त्यसपछि 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(); } } }
आउटपुट:
23>
स्पष्टीकरण:
माथिको कार्यक्रममा हामीले के गरेका छौं, हामीले भण्डारण गरेका छौं। 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 उदाहरण बन्द गर्न र खाली गर्न प्रयोग गरिन्छ।ResultSet instance सँग सम्बन्धित स्रोतहरू।
- ResultSetMetaData getMetaData(): यसले ResultSetMetaData उदाहरण फर्काउँछ। यसमा क्वेरी आउटपुटको स्तम्भहरूको प्रकार र गुणको बारेमा जानकारी छ। हामी अर्को खण्डमा ResultSetMetaData बारे थप जान्नेछौं।
ResultSetMetaData
मेटाडेटा के हो?
मेटाडेटा डेटा को बारे मा डेटा को अर्थ। यो इन्टरफेस प्रयोग गरेर, हामी ResultSet बारे थप जानकारी प्राप्त गर्नेछौं। यो java.sql प्याकेजमा उपलब्ध छ। प्रत्येक ResultSet वस्तु एउटा ResultSetMetaData वस्तुसँग सम्बन्धित हुन्छ।
यस वस्तुमा स्तम्भको डाटाटाइप, स्तम्भको नाम, स्तम्भहरूको संख्या, तालिकाको नाम, स्कीमा नाम, आदि जस्ता स्तम्भहरूको गुणहरूको विवरण हुनेछ। हामीले ResultSetMetaData() विधि प्रयोग गरेर 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) | यो |