java jdbc transaction management with example
यह ट्यूटोरियल JDBC लेन-देन के प्रकार, डेटा प्रकार, लेनदेन प्रबंधन के तरीके और उन्हें जावा प्रोग्राम में उपयोग करने का तरीका बताता है:
में JDBC परिणाम का ट्यूटोरियल JDBC ट्यूटोरियल श्रृंखला , हमने डेटा को पुनः प्राप्त करने के लिए JDBC ResultSet का उपयोग करना सीखा।
इस ट्यूटोरियल में, हम JDBC में लेनदेन के प्रकारों पर चर्चा करेंगे। हमने अपने पिछले ट्यूटोरियल में लेन-देन के प्रकारों का एक संक्षिप्त परिचय देखा है। यहां हम एक विस्तृत तरीके से देखेंगे। हम यह भी बताएंगे कि जेडडीबीसी में डेटा प्रकार क्या हैं और जावा प्रोग्राम में इसका उपयोग कैसे करें।
डेटाबेस में अलग-अलग डेटा प्रकार होंगे और जावा में अलग-अलग डेटा प्रकार होंगे। JDBC इस भेदभाव का प्रबंधन करेगा। JDBC में महत्वपूर्ण विषय जानने के लिए तैयार रहें।
आप क्या सीखेंगे:
JDBC लेन-देन प्रबंधन
क्रियाओं के अनुक्रम (एसक्यूएल स्टेटमेंट) को एक एकल इकाई के रूप में माना जाता है जिसे लेनदेन के रूप में जाना जाता है। डेटा अखंडता और स्थिरता बनाए रखने के लिए RDBMS- उन्मुख अनुप्रयोगों के लिए लेनदेन प्रबंधन महत्वपूर्ण है।
लेन-देन करते समय, हम ResXXSet ऑब्जेक्ट में डेटा को पुनः प्राप्त करने और सेट करने के लिए getXXX और setXXX विधियों का उपयोग करेंगे। XXX स्तंभों के डेटा प्रकारों का प्रतिनिधित्व करता है। हम इस ट्यूटोरियल में JDBC के लेन-देन और डेटा प्रकारों पर चर्चा करेंगे।
लेन-देन के प्रकार
JDBC में प्रत्येक SQL क्वेरी को लेनदेन माना जाएगा। जब हम JDBC में एक डेटाबेस कनेक्शन बनाते हैं, तो यह ऑटो-कमिट मोड में चलेगा (ऑटो-कम वैल्यू TRUE है)। एसक्यूएल स्टेटमेंट के निष्पादन के बाद, यह स्वचालित रूप से प्रतिबद्ध होगा।
कभी-कभी, हम कुछ और SQL कथनों के निष्पादन के बाद लेनदेन करना चाहते हैं। उस समय, हमें फाल्ट के लिए ऑटो-कमिट मूल्य निर्धारित करने की आवश्यकता है। ताकि सभी प्रश्नों को निष्पादित करने से पहले डेटा को प्रतिबद्ध नहीं किया जा सके। यदि हमें लेन-देन में अपवाद मिलता है, तो हम परिवर्तन कर सकते हैं (पहले की तरह)। लेनदेन प्रबंधन को अच्छी तरह से समझाया जा सकता है - ACID गुणों का उपयोग करके।
ACID का मतलब है
- ए-एटॉमिसिटी -> यदि सभी प्रश्नों को सफलतापूर्वक निष्पादित किया जाता है, तो डेटा को प्रतिबद्ध किया जाएगा, अन्यथा नहीं।
- सी - संगति -> डीबी किसी भी लेनदेन के बाद एक सुसंगत स्थिति में होना चाहिए।
- I- अलगाव -> लेन-देन को अन्य लेनदेन से अलग किया जाता है।
- डी-स्थायित्व -> यदि लेनदेन एक बार प्रतिबद्ध है, तो यह हमेशा प्रतिबद्ध रहेगा।
लेन-देन प्रबंधन में तीन सबसे महत्वपूर्ण कार्य हैं। वे:
किसी भी साइट पूर्ण संस्करण से मुफ्त वीडियो डाउनलोडर
- प्रतिबद्ध: SQL कथनों के निष्पादन के बाद, हम डेटाबेस में परिवर्तनों को स्थायी बनाना चाहते हैं। हमें कमिट () विधि कहनी चाहिए। आम तौर पर, जो प्रतिबद्ध है उसका मतलब है कि यह डेटाबेस में स्थायी रूप से बदलाव करेगा। हम परिवर्तनों को पूर्ववत / रद्द नहीं कर सकते। लेकिन हम डेटाबेस में डेटा बदल सकते हैं।
- रोलबैक: रोलबैक अंतिम प्रतिबद्ध या उल्लेखित बचत बिंदु तक परिवर्तनों को पूर्ववत करता है। कभी-कभी हम परिवर्तनों को पूर्ववत करना चाहते हैं। उदाहरण के लिए, हमारे पास एक नेस्टेड क्वेरी है, एक भाग को सफलतापूर्वक निष्पादित किया गया है, और दूसरे ने कुछ अपवाद को फेंक दिया है। उस समय, हम पहले भाग द्वारा किए गए परिवर्तनों को पूर्ववत् करना चाहते हैं, हमें रोलबैक () पद्धति को कॉल करना चाहिए ताकि यदि कोई अपवाद हुआ हो।
- पॉइंट सहेजें: Savepoint एक लेनदेन में चेकपॉइंट बनाने में मदद करता है और यह उस विशेष सेव पॉइंट को रोलबैक करने की अनुमति देता है। लेन-देन के लिए बनाई गई कोई भी सेव पॉइंट स्वचालित रूप से नष्ट हो जाएगी और लेन-देन के लिए प्रतिबद्ध हो जाएगी या वापस लुढ़क जाएगी।
अब तक हमने देखा है कि क्या है, रोलबैक, और सेवपॉइंट और उसके संचालन। नीचे, हम इसके तरीकों को देखेंगे और कार्यक्रम में इसका उपयोग कैसे करेंगे।
लेनदेन प्रबंधन के तरीके
कनेक्शन इंटरफ़ेस लेनदेन प्रबंधन के लिए 5 तरीके प्रदान करता है। वे इस प्रकार हैं:
# 1) setAutoCommit () विधि
डिफ़ॉल्ट रूप से, AutoCommit मान का मान TRUE होता है। एसक्यूएल स्टेटमेंट के निष्पादन के बाद, यह स्वचालित रूप से प्रतिबद्ध होगा। SetAutoCommit () विधि का उपयोग करके हम AutoCommit में मान सेट कर सकते हैं।
# 2) प्रतिबद्ध () विधि
डेटा को कमिट करने के लिए कमिट मेथड का उपयोग किया जाता है। SQL स्टेटमेंट के निष्पादन के बाद, हम कमिट () कह सकते हैं। यह SQL कथन द्वारा किए गए परिवर्तनों को प्रतिबद्ध करेगा।
वाक्य - विन्यास: con.commit ();
# 3) रोलबैक () विधि
रोलबैक विधि का उपयोग परिवर्तन करने के लिए किया जाता है जब तक कि अंतिम प्रतिबद्धता नहीं हुई है। यदि हम SQL स्टेटमेंट्स के निष्पादन प्रवाह में किसी समस्या या अपवाद का सामना करते हैं, तो हम लेन-देन वापस कर सकते हैं।
वाक्य - विन्यास: con.rollback ();
#4) setSavepoint() Method
Savepoint आपको लेनदेन पर अतिरिक्त नियंत्रण देती है। जब आप लेन-देन (एसक्यूएल स्टेटमेंट्स का एक समूह) में एक सेवपॉइंट सेट करते हैं, तो आप सभी बदलावों को बचाने के लिए रोलपॉइंट () पद्धति का उपयोग कर सकते हैं, जब तक कि सेवपॉइंट या सेवपॉइंट () के बाद। setSavepoint () विधि का उपयोग एक नई बचत बिंदु बनाने के लिए किया जाता है।
# 5) रिलीजवेसपॉइंट () विधि
इसका उपयोग बनाये गए savepoint को हटाने के लिए किया जाता है।
नीचे दिए गए कार्यक्रम में, आपको इन विधियों के बारे में अधिक जानकारी मिलेगी और यह भी सीखेंगे कि जावा प्रोग्राम में इसका उपयोग कैसे करें।
इस ट्यूटोरियल में, सभी प्रोग्राम जावा में लिखे गए हैं। हमने जावा 8 संस्करण और ओरेकल डीबी का उपयोग किया है।
>> क्लिक करें यहां Oracle सॉफ्टवेयर डाउनलोड करने के लिए।
>> क्लिक करें यहां जावा संस्करण 8 डाउनलोड करने के लिए।
इसमें चरण-दर-चरण जावा स्थापना प्रक्रिया है।
लेन-देन उदाहरण कार्यक्रम
package com.STH.JDBC; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Savepoint; import java.sql.Statement; public class Transaction_Management { public static void main(String() args) throws ClassNotFoundException { // TODO Auto-generated method stub //Select Query to get the Data from employee_details table String QUERY = 'select * from employee_details where empNum = 2001'; String QUERY1 = 'select * from employee_details where empNum = 2002'; Boolean autoCommit; String update_query = 'update employee_details set salary = 41000 where empNum = 2001'; String update_query1 = 'update employee_details set salary = 42000 where empNum = 2002'; //Update query to set the email id for the employee whose empNUM is 1001 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; //Checking whether the SELECT query is executed successfully or not rs1 = statemnt1.executeQuery(QUERY); //Executed the SELECT Query System.out.println('Getting the data from employee_details table'); displayData(rs1); //Set the autoCommit value of the connection to FALSE System.out.println('Setting the AutoCommit value as FALSE'); conn.setAutoCommit(false); autoCommit = conn.getAutoCommit(); System.out.println('AutoCommit value of the Connection = '+ autoCommit); //Creating Statement to execute the update query statemnt1 = conn.createStatement(); System.out.println('Executing Update query to update salary of EMPNUM = 2001'); System.out.println('Update Query is ' + update_query); int return_rows = statemnt1.executeUpdate(update_query); System.out.println('Updated the data but didn't commit'); //Getting data after Updation Connection conn1 = DriverManager.getConnection('jdbc:oracle:thin:system/pass123@localhost:1521:XE'); System.out.println('Opening new connection'); System.out.println('EMPNUM = 2001 data'); Statement statement2 = conn1.createStatement(); ResultSet rs; rs = statement2.executeQuery(QUERY); displayData(rs); System.out.println('Commit has been done'); conn.commit(); Savepoint s1 = conn.setSavepoint(); System.out.println('SavePoint has been created'); System.out.println('Displaying data of EMPNUM = 2001'); System.out.println('Using The Second Connection'); rs = statement2.executeQuery(QUERY); displayData(rs); rs = statemnt1.executeQuery(QUERY); //Rollback the transaction System.out.println('Data of EMPNUM = 2002'); rs1 = statemnt1.executeQuery(QUERY1); displayData(rs1); System.out.println('Updating the salary of EMPNUM = 2002'); System.out.println('Update Query is ' + update_query1); statemnt1.executeUpdate(update_query1); System.out.println('Data of EMPNUM = 2002 but didn't commit'); rs1 = statemnt1.executeQuery(QUERY1); displayData(rs1); System.out.println('Rollback is done... so updated data won't be reflected'); conn.rollback(s1); System.out.println('Data of EMPNUM = 2002 after Rollback till the last savepoint'); rs1 = statemnt1.executeQuery(QUERY1); displayData(rs1); } catch (SQLException e) { e.printStackTrace(); } } public static void displayData(ResultSet rs1) throws SQLException { 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); } } }
आउटपुट:
स्पष्टीकरण:
उपरोक्त लेन-देन प्रबंधन कार्यक्रम में हमने जो किया है, वह दिए गए कर्मचारी के मूल्यों को EMPLOYEE_DETAILS तालिका में अद्यतन करने और डेटा को प्रतिबद्ध करने के लिए है। यदि कोई त्रुटि या अपवाद हुआ है तो हमने रोलबैक () ऑपरेशन किया है। अब हम कार्यक्रम की पूरी व्याख्या देखने जा रहे हैं।
# 1) उनके EMPID के आधार पर 2 कर्मचारियों के लिए 2 चयनित क्वेरी बनाई गई
नीचे 2 चुनिंदा प्रश्न दिए गए हैं।
String QUERY = 'select * from employee_details where empNum = 2001'; String QUERY1 = 'select * from employee_details where empNum = 2002';
#दो) अपने EMPID के आधार पर 2 कर्मचारियों के लिए दो अपडेट क्वेरी बनाई
दो अद्यतन क्वेरी:
String update_query = 'update employee_details set salary = 41000 where empNum = 2001'; String update_query1 = 'update employee_details set salary = 42000 where empNum = 2002';
# 3) कनेक्शन खोलें, चयनित क्वेरी निष्पादित करें और EMPNUM = 2001 का डेटा प्रदर्शित करें।
# 4) SetAutoCommit () विधि का उपयोग करते हुए, autoCommit के मान को असत्य पर सेट करें।
# 5) EMPNUM = 2001 की अपडेट क्वेरी से बाहर निकल कर उसी डेटाबेस के लिए एक और कनेक्शन बनाया और EMPNUM = 2001 का मान चुना।
# 6) कर्मचारी का परिणामी डेटा जिसका EMPNUM = 2001 अद्यतन डेटा नहीं है। क्योंकि हमने कमिटमेंट () ऑपरेशन नहीं किया है। यदि आपने उसी कनेक्शन का उपयोग किया है जहां आपने इसे अपडेट करने के लिए उपयोग किया है, तो यह आपको अपडेट किया गया डेटा दिखाएगा। अब डेटा प्रतिबद्ध है। डेटा तालिका में परिलक्षित किया गया है।
# 7) कमिटमेंट ऑपरेशन के बाद एक सेवपॉइंट बनाया।
# 8) EMPNUM = 2002 का डेटा प्रदर्शित करने के लिए चयन क्वेरी का उपयोग करना। अपडेट क्वेरी का उपयोग करके उस कर्मचारी का वेतन बदल दिया। उसके बाद उसी कनेक्शन का उपयोग करते हुए EMPNUM = 2002 का डेटा प्रदर्शित किया। इसे अद्यतन डेटा दिखाना चाहिए।
# 9) रोलबैक विधि का उपयोग करके अंतिम savepoint तक रोलबैक को पूरा करें। अब जब हमने उसी कनेक्शन का उपयोग करके उस कर्मचारी के डेटा को प्रदर्शित किया है, तो उसके पास पुराना डेटा है क्योंकि रोलबैक अंतिम सेव पॉइंट तक बदलावों को अनडू कर देता है यदि हम अंतिम बिंदु के लिए सेव पॉइंट का उल्लेख करते हैं।
# 10) हमने एक विधि बनाई है जो डेटा प्रदर्शित करेगी क्योंकि हम यहां कई बार डेटा प्रदर्शित कर रहे हैं।
JDBC डेटा प्रकार
डेटाबेस में SQL डेटा प्रकार और जावा में जावा डेटा प्रकार होते हैं। जावा एप्लिकेशन और डेटाबेस के बीच डेटा पढ़ने और लिखने के लिए एक तंत्र होना चाहिए। विभिन्न डेटाबेस SQL प्रकारों का समर्थन करते हैं, लेकिन नाम में कुछ भिन्नताओं के साथ।
उदाहरण के लिए, अधिकांश डेटाबेस बड़े द्विआधारी मूल्यों का समर्थन करते हैं, ओरेकल इसे लॉन्ग रॉ के रूप में कहता है, साइबेस इसे IMAGE के रूप में कहता है, इंफॉर्मिक्स इसे BYTE के रूप में कहता है, और DB2 इसे BIT DATA के लिए LONG VARCHAR के रूप में कहता है।
JDBC कार्यक्रम लिखते समय, हमें लक्ष्य डेटाबेस द्वारा उपयोग किए जाने वाले SQL डेटा प्रकारों के बारे में चिंता करने की आवश्यकता नहीं है। JDBC के पास वर्ग java.sql.Types में सामान्य एसक्यूएल प्रकार के पहचानकर्ताओं का एक सेट है। ये प्रकार अधिकांश जेनेरिक SQL डेटा प्रकारों का समर्थन करने के लिए डिज़ाइन किए गए हैं। JDBC प्रोग्राम लिखते समय, हम JDBC डेटा प्रकारों का ही उपयोग करेंगे।
JDBC ड्राइवर जावा डेटा प्रकारों को डेटाबेस डेटा प्रकारों में परिवर्तित करेगा। आप java.sql.DatabaseMetaData.getTypeInfo विधि का उपयोग करके जाँच सकते हैं कि SQL प्रकार वास्तव में किसी दिए गए डेटाबेस द्वारा समर्थित हैं और फिर एक प्रोग्राम लिखें। JDBC अधिकांश डेटा प्रकारों के लिए एक डिफ़ॉल्ट मैपिंग का उपयोग करता है।
उदाहरण के लिए, जावा स्ट्रिंग को SQL VARCHAR प्रकार में परिवर्तित किया जाएगा।
हम देखेंगे कि निम्नलिखित तालिका में मैपएक्सएक्सएक्सएक्सएक्स, गेटएक्सएक्सएक्सएक्स और तैयारएक्सएक्सएक्सएक्स या कॉलटेबलटेमेंट या रिजल्टसेट इंटरफेस की अपडेटएक्सएक्सएक्स विधि कैसे की जाती है:
SQL टाइप करें | जावा / JDBC प्रकार | setXXX | getXXX | updateXXX |
---|---|---|---|---|
पूर्णांक | पूर्णांक | setInt | रंगा हुआ | अद्यतन करें |
CHAR | java.lang.String | सेटस्ट्रिंग | उठना | अद्यतन करना |
वाराह | java.lang.String | सेटस्ट्रिंग | उठना | अद्यतन करना |
LONGVARCHAR | java.lang.String | सेटस्ट्रिंग | उठना | अद्यतन करना |
बीआईटी | बूलियन | सेटबुलियन | GetBoolean | अद्यतन करें |
संख्यात्मक | java.math.BigDecimal | setBigDecimal | getBigDecimal | UpdateBigDecimal |
SMALLINT | कम | सेटशॉट | GetShort | अद्यतन करें |
BIGINT | लंबा | सेटलॉन्ग | लंबा समय लें | अद्यतन करें |
असली | नाव | सेटफ्लोट | getFloat | अद्यतन करें |
फ्लोट | नाव | सेटफ्लोट | getFloat | अद्यतन करें |
दोहरा | दोहरा | सेटडबल | मिलता है | अद्यतन करें |
बायनरी | बाइट () | सेट करता है | getBytes | अद्यतन करें |
तारीख | java.sql.Date | तारीख सेट करें | तारीख लें | डेट अपडेट करें |
समय | java.sql.Time | निर्धारित समय | समय निकालो | समय सुधारें |
TIMESTAMP | java.sql.Timestamp | सेटटेस्टैम्प | getTimestamp | अपडेट टाइमस्टैम्प |
CLOB | java.sql.Clob | setClob | getClob | अद्यतन करें |
ब्लॉब | java.sql.Blob | setBlob | getBlob | अद्यतन करें |
सरणी | सरणी | सेट करें | getArray | अद्यतन करें |
एक्सएमएल | एक्सएमएल | setSQLXML | getSQLXML | अपडेट SQLXML |
संरचित प्रकार | वस्तु | setObject | getObject | updateObject |
हमने अपने पिछले ट्यूटोरियल में मूलभूत डेटा प्रकारों के लिए सेटएक्सएक्सएक्स, गेटएक्सएक्सएक्स और अपडेटएक्सएक्सएक्सएक्स विधि प्राप्त की है। आप इसका उल्लेख कर सकते हैं।
यहाँ, हमने निम्नलिखित उदाहरण में क्लोब और ब्लॉब प्रकारों के बारे में बताया है।
BLOB उदाहरण कार्यक्रम
package com.STH.JDBC; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.sql.Blob; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; public class Blob_Example { @SuppressWarnings('resource') public static void main(String() args) throws ClassNotFoundException, IOException { // TODO Auto-generated method stub String QUERY = 'Create table Blob_Sample_Example ( PicName varchar2(30), picture BLOB)'; //Select Query to get the Data from employee_details table //Update query to set the email id for the employee whose empNUM is 1001 Class.forName('oracle.jdbc.driver.OracleDriver'); System.out.println('Establishing Connection'); try(Connection conn = DriverManager.getConnection('jdbc:oracle:thin:system/pass123@localhost:1521:XE')) { Statement statemnt1 = conn.createStatement(); //Executing the Create Query statemnt1.execute(QUERY); System.out.println('Table has been created for BLOB type'); System.out.println('Inserting data into Blob_Sample_Example table'); String insert_query = ' insert into Blob_Sample_Example values(?,?)'; //Passing the values for preparedStatement PreparedStatement pstmnt = conn.prepareStatement(insert_query); pstmnt.setString(1, 'Sotware Testing Help'); //Mention Image path to store the image in DB FileInputStream inputStream = new FileInputStream('D:\Bhakiya\Bhakiya\JDBC\Software Testing Pic.png'); pstmnt.setBlob(2, inputStream); //Executing the preparedStatement to insert the data pstmnt.execute(); System.out.println('Retrieving data'); ResultSet rs = statemnt1.executeQuery('select * from Blob_Sample_Example'); while(rs.next()) { //Getting Picture Name System.out.println('Picture Name:' + rs.getString(1)); Blob blob1 = rs.getBlob(2); //using blob retrieving the Image byte byteArray() = blob1.getBytes(1,(int)blob1.length()); FileOutputStream outPutStream = new FileOutputStream('D:\Bhakiya\Bhakiya\JDBC\Software Testing Pic output.png'); outPutStream.write(byteArray); System.out.println(' Go to the following path: D:\Bhakiya\Bhakiya\JDBC\Software Testing Pic output.png'); } } catch (SQLException e) { e.printStackTrace(); } } }
आउटपुट:
फ़ाइल को दिए गए पथ में सफलतापूर्वक सहेजा गया है।
स्पष्टीकरण:
उपरोक्त कार्यक्रम में हमने जो किया है, सबसे पहले हमने फ़ोल्डर में एक चित्र बनाया / सहेजा है “D:\Bhakiya\Bhakiya\JDBC” । यह स्थान केवल उदाहरण के लिए है। आप अपने सिस्टम में अपना खुद का फ़ाइल पथ बना सकते हैं। फ़ाइल का नाम एक सॉफ्टवेयर परीक्षण तस्वीर है। फिर हमने उस छवि को DB तालिका में संग्रहीत करने के लिए एक जावा प्रोग्राम बनाया और तालिका से छवि को पुनर्प्राप्त किया और इसे स्थानीय प्रणाली में संग्रहीत किया।
अब तक हमने कार्य के अवलोकन पर चर्चा की है। अब हम देखेंगे कि हमने इसे कार्यक्रम में कैसे हासिल किया।
# 1) छवि को संग्रहीत करने के लिए DB में एक तालिका बनाएं।
वाक्य - विन्यास:
String QUERY = 'Create table Blob_Sample_Example ( PicName varchar2(30), picture BLOB)';
उपरोक्त क्वेरी में, हमारे पास 2 कॉलम हैं।
- PicName - varchar2 -> इसका उपयोग चित्र के नाम को संग्रहीत करने के लिए किया जाता है
- चित्र - BLOB -> इसका उपयोग चित्र को तालिका में संग्रहीत करने के लिए किया जाता है।
BLOB डेटा प्रकार का उपयोग DB तालिका में चित्र / छवि को संग्रहीत करने के लिए किया जाता है।
#दो) कनेक्शन और विवरण बनाया गया है और क्रिएट क्वेरी को निष्पादित करने के लिए निष्पादन विधि कहा जाता है।
statemnt1.execute(QUERY);
# 3) इसके बाद, हमने इंसर्ट क्वेरी क्रिएट की है और इसे रेडीस्टेमेंट का उपयोग करके निष्पादित किया है।
तैयार किया गया सिंटैक्स:
PreparedStatement pstmnt = conn.prepareStatement(insert_query);
# 4) सेटस्ट्रिंग () का उपयोग करके - चित्र का नाम सेट करें।
# 5) चित्र सेट करने के लिए, चित्र स्थान को पास करने के लिए FileInputStream वर्ग का उपयोग करें।
वाक्य - विन्यास:
FileInputStream inputStream = new FileInputStream('Picture Full Path');
फिर, सेटब्लोब () विधि का उपयोग करके, हम चित्र को तैयार किए गए ऑब्जेक्ट ऑब्जेक्ट में सेट कर सकते हैं। उसके बाद, तैयारी की निष्पादन विधि कहा जाता है। वह तालिका में दिए गए डेटा को सम्मिलित करेगा।
इंसर्ट क्वेरी को निष्पादित करने के बाद, ResultSet ऑब्जेक्ट का उपयोग करके हम टेबल से डेटा का चयन कर रहे हैं (सेलेक्ट क्वेरी का उपयोग करके)।
# 6) GetString विधि का उपयोग करके, हम PicName स्तंभ का मान प्राप्त कर सकते हैं।
# 7) चित्र प्राप्त करने के लिए, निम्नलिखित चरणों का पालन करें:
- ब्लॉब ऑब्जेक्ट बनाएँ और परिणाम मान के getBlob विधि के रिटर्न मान निर्दिष्ट करें।
- इसके लिए सिंटेक्स है: बूँद blob1 = rs.getBlob ();
- बाइट सरणी ऑब्जेक्ट बनाएं और बाइट के रूप में ब्लॉब ऑब्जेक्ट का मान प्राप्त करें।
- ऑब्जेक्ट बनाएँ FileOutputStream ऑब्जेक्ट और चित्र को उस पथ में संग्रहीत करने के लिए पूर्ण पथ पास करें। FileOutputStream ऑब्जेक्ट का कॉल लेखन () विधि - जो चित्र को संग्रहीत करेगा।
- उसके बाद कार्यक्रम को सफलतापूर्वक निष्पादित किया गया।
# 8) आउटपुट चित्र के स्थान पर जाएं और जांचें कि इनपुट और आउटपुट समान हैं या नहीं।
CLOB उदाहरण कार्यक्रम
package com.STH.JDBC; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; import java.io.Reader; import java.sql.Blob; import java.sql.Clob; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; public class Clob_Example { public static void main(String() args) throws ClassNotFoundException, IOException { // TODO Auto-generated method stub String QUERY = 'Create table Clob_Sample_Example ( FileName varchar2(30), StoreFile CLOB)'; //Create Query to create new table for CLOB example Class.forName('oracle.jdbc.driver.OracleDriver'); //Creating Connection System.out.println('Establishing Connection'); try(Connection conn = DriverManager.getConnection('jdbc:oracle:thin:system/pass123@localhost:1521:XE')) { Statement statemnt1 = conn.createStatement(); //Executing create query statemnt1.execute(QUERY); System.out.println('Table has been created for CLOB type'); System.out.println('Inserting data into Clob_Sample_Example table'); //Insert Query String insert_query = ' insert into Clob_Sample_Example values(?,?)'; //Passing Parameters for PreparedStatement PreparedStatement pstmnt = conn.prepareStatement(insert_query); pstmnt.setString(1, 'File1'); FileReader fileRead = new FileReader('D:\Bhakiya\Bhakiya\JDBC\file1.txt'); pstmnt.setClob(2, fileRead); //Executing the PreparedStatement pstmnt.execute(); System.out.println('Retrieving data'); ResultSet rs = statemnt1.executeQuery('select * from Clob_Sample_Example'); while(rs.next()) { System.out.println('File Name:' + rs.getString(1)); //Getting file data Clob clob1 = rs.getClob(2); Reader r = clob1.getCharacterStream(); //Using Reader - read the data and Writer - Write the data in file in the given location FileWriter fileWrite = new FileWriter('D:\Bhakiya\Bhakiya\JDBC\file1 output.txt'); int i; while((i=r.read())!=-1) fileWrite.write(i); fileWrite.close(); System.out.println(' Go to the following path: D:\Bhakiya\Bhakiya\JDBC\file1 output.txt'); } } catch (SQLException e) { e.printStackTrace(); } } }
आउटपुट:
इनपुट फ़ाइल:
फ़ाइल को दिए गए पथ में सफलतापूर्वक सहेजा गया है।
आउटपुट फ़ाइल:
स्पष्टीकरण:
उपरोक्त कार्यक्रम में हमने जो किया है, वह पहले हमने 'D: \ Bhakiya \ Bhakiya \ JDBC' फ़ोल्डर में एक पाठ फ़ाइल 'file1.txt' को बनाया / सहेजा है। यह स्थान केवल उदाहरण के लिए है। आप अपने सिस्टम में अपना खुद का फ़ाइल पथ बना सकते हैं। फिर हमने उस फ़ाइल को DB तालिका में संग्रहीत करने के लिए एक जावा प्रोग्राम बनाया और उस फ़ाइल को तालिका से पुनर्प्राप्त किया और इसे स्थानीय प्रणाली में संग्रहीत किया।
अब तक हमने कार्य के अवलोकन पर चर्चा की है। अब हम देखेंगे कि हमने इसे कार्यक्रम में कैसे हासिल किया।
# 1) छवि को संग्रहीत करने के लिए DB में एक तालिका बनाएं।
नीचे क्रिएट टेबल क्वेरी का सिंटैक्स है:
String QUERY = 'Create table Clob_Sample_Example ( FileName varchar2(30), StoreFile CLOB)';
उपरोक्त क्वेरी में, हमारे पास 2 कॉलम हैं।
- FileName - varchar2 -> इसका उपयोग चित्र के नाम को संग्रहीत करने के लिए किया जाता है।
- StoreFile - CLOB -> इसका उपयोग तालिका में फ़ाइल को संग्रहीत करने के लिए किया जाता है।
CLOB डेटा प्रकार का उपयोग DB तालिका में वर्ण प्रकार के बाइनरी डेटा को संग्रहीत करने के लिए किया जाता है
#दो) कनेक्शन और विवरण बनाया गया है और क्रिएट क्वेरी को निष्पादित करने के लिए निष्पादन विधि कहा जाता है।
statemnt1.execute(QUERY);
# 3) अगला, हमने इन्सर्ट क्वेरी बनाई है और इसे रेडीस्टेमेंट का उपयोग करके निष्पादित किया है।
तैयार किया गया सिंटैक्स:
PreparedStatement pstmnt = conn.prepareStatement(insert_query);
# 4) SetString () का उपयोग करके - FileName का नाम सेट करें।
# 5) फ़ाइल को सेट / स्टोर करने के लिए, फाइल लोकेशन क्लास का उपयोग करके फाइल को फिल लोकेशन के साथ पास करें।
वाक्य - विन्यास:
FileReader fileRead = new FileReader('D:\Bhakiya\Bhakiya\JDBC\file1.txt');
तब setClob () विधि का उपयोग करके, हम फाइल को तैयार किए गए ऑब्जेक्ट ऑब्जेक्ट में सेट कर सकते हैं। उसके बाद तैयार करने की विधि को निष्पादित विधि कहा जाता है। वह तालिका में दिए गए डेटा को सम्मिलित करेगा।
इंसर्ट क्वेरी को निष्पादित करने के बाद, ResultSet ऑब्जेक्ट का उपयोग करके हम तालिका से डेटा का चयन कर रहे हैं (सेलेक्ट क्वेरी का उपयोग करके)।
क्वेरी का चयन करें:
'select * from Clob_Sample_Example'
# 6) GetString विधि का उपयोग करके हम FileName Column का मान प्राप्त कर सकते हैं।
# 7) फ़ाइल प्राप्त करने के लिए, हमने निम्न चरणों का पालन किया है:
- क्लो ऑब्जेक्ट बनाएं और रिजल्टसेट ऑब्जेक्ट के गेटक्लो विधि के रिटर्न वैल्यू असाइन करें।
- इसके लिए सिंटेक्स है: क्लोब clob1 = rs.getClob ();
- रीडर ऑब्जेक्ट बनाएं और कैरेक्टर के रूप में क्लो ऑब्जेक्ट का मान प्राप्त करें।
- ऑब्जेक्ट FileWriter ऑब्जेक्ट बनाएँ और फ़ाइल को उस पथ में संग्रहीत करने के लिए पूर्ण पथ पास करें। FileWrite ऑब्जेक्ट का कॉल लेखन () विधि - जो स्थान में फ़ाइल में डेटा लिख देगा।
- उसके बाद कार्यक्रम को सफलतापूर्वक निष्पादित किया गया।
# 8) आउटपुट फ़ाइल के स्थान पर जाएं और जांचें कि इनपुट और आउटपुट फाइलें समान हैं या नहीं।
याद दिलाने के संकेत:
- ACID गुण डेटाबेस में लेनदेन प्रबंधन की व्याख्या करता है।
- लेनदेन प्रबंधन में कमिट (), रोलबैक () और सेवपॉइंट सबसे महत्वपूर्ण ऑपरेशन हैं।
- प्रतिबद्ध परिवर्तन स्थायी रूप से डीबी में कर देगा, रोलबैक अंतिम प्रतिबद्ध या उल्लेखित बचत बिंदु तक परिवर्तनों को पूर्ववत कर देगा और Savepoint एक चेकपॉइंट बनाने में मदद करता है।
- डेटाबेस SQL डेटा प्रकारों को बनाए रखता है और जावा जावा डेटा प्रकारों को बनाए रखता है। इस रूपांतरण को संभालने के लिए JDBC ड्राइवर का उपयोग किया जाता है।
- JDBC ड्राइवर के पास स्वयं कुछ SQL प्रकार के पहचानकर्ता हैं, इसलिए प्रोग्रामर को डेटा प्रकारों के बारे में चिंता करने की आवश्यकता नहीं है।
बार बार पूछे जाने वाले प्रश्न
Q # 1) JDBC डेटा प्रकार क्या है?
उत्तर: जावा में इसके डेटा प्रकार हैं, और डेटाबेस में इसके डेटा प्रकार हैं। JDBC ड्राइवर जावा डेटा प्रकार को उपयुक्त SQL डेटा प्रकार में कनवर्ट करता है जो डेटाबेस द्वारा स्वीकार करेगा। परिणामी वस्तुएं उचित डेटा प्रकारों के लिए सेटएक्सएक्सएक्सएक्स () तरीके और गेटएक्सएक्सएक्सएक्सएक्स () तरीके भी उपलब्ध कराती हैं।
Q # 2) जावा में तारीख के लिए डेटा प्रकार क्या है?
उत्तर: जावा में तारीख न केवल एक डेटा प्रकार है, बल्कि एक वर्ग है। जावा में एक तारीख तिथि, समय, वर्ष, दिन का नाम, सप्ताह का दिन और समय क्षेत्र है। दिनांक वर्ग में प्रासंगिक डेटा को पुनः प्राप्त करने के लिए उपयुक्त विधियाँ हैं।
Q # 3) java.util.Date और java.sql.Date में क्या अंतर है?
उत्तर: मुख्य अंतर java.util है। दिनांक और समय के बारे में भी जानकारी है। लेकिन java.sql.Date को केवल तारीख के बारे में जानकारी है। यह मुख्य अंतर है जो हम java.util को मैप नहीं कर सकते हैं। सीधे java.sql.Date के साथ।
Q # 4) क्या हमारे पास SQL के लिए TIME और TIMESTAMP प्रकार का प्रतिनिधित्व करने के लिए जावा में एक वर्ग है?
उत्तर: हाँ, हमारे पास SQL के लिए TIME और TIMESTAMP प्रकार के लिए एक वर्ग है। java.sql.Time वर्ग TIME- संबंधित जानकारी का प्रतिनिधित्व करता है। java.sql.timestamp वर्ग TIMESTAMP संबंधित सूचनाओं का प्रतिनिधित्व करता है।
Q # 5) JDBC में लेनदेन कैसे शुरू करें?
उत्तर: JDBC कनेक्शन ऑटो-प्रतिबद्ध मोड सक्षम होने के साथ शुरू होता है, जहां प्रत्येक SQL स्टेटमेंट को लेनदेन माना जाता है। JDBC में लेनदेन शुरू करने के लिए कोई विशेष प्रक्रिया नहीं है। जब आप एक कनेक्शन बनाते हैं और एसक्यूएल स्टेटमेंट को निष्पादित करना शुरू करते हैं, तो यह वह जगह है जहां लेनदेन शुरू हो गया है।
Q # 6) जावा में कमिट () विधि क्या है?
उत्तर: जावा में प्रतिबद्ध () विधि का उपयोग उन परिवर्तनों को बचाने के लिए किया जाता है जो अंतिम प्रतिबद्ध () के बाद से किए जाते हैं। कनेक्शन इंटरफ़ेस में कमिट () विधि उपलब्ध है। कनेक्शन ऑब्जेक्ट का उपयोग करके, हम कमिट () कह सकते हैं।
Q # 7) जावा में रोलबैक विधि क्या है?
उत्तर: अंतिम कमिटमेंट () के बाद, यदि कोई समस्या हुई है तो हम रोलबैक () मेथड को अंतिम कमिटमेंट तक सभी बदलावों को वापस करने के लिए कॉल कर सकते हैं। कनेक्शन ऑब्जेक्ट का उपयोग करके, हम रोलबैक () विधि को कॉल कर सकते हैं।
निष्कर्ष
यहां, हमने जावा और डीबी में डेटा प्रकारों को शामिल किया है और जेडीबीसी ड्राइवर इसे कैसे संभालता है। हमने ACID गुणों पर चर्चा की है। यह बैंकिंग क्षेत्र के लिए सबसे महत्वपूर्ण है। यह आपके करियर के लिए बहुत मददगार होगा। लेन-देन प्रबंधन अनुभाग में, हमने प्रतिबद्ध और रोलबैक विधियों जैसे कि कमिट (), रोलबैक (), सेटऑटोमोमिट (), सेटसेवपॉइंट () और रिलीज़स्वेप पॉइंट () पर चर्चा की है।
अनुशंसित पाठ
- Java JDBC ट्यूटोरियल: JDBC (जावा डेटाबेस कनेक्टिविटी) क्या है
- जावा JDBC कनेक्शन ट्यूटोरियल प्रोग्रामिंग उदाहरण के साथ
- JDBC DriverManager, JDBC रेडीस्टेडमेंट और स्टेटमेंट
- JDBC रिजल्टसेट: डेटा को वापस लेने के लिए जावा रिजल्टसेट का उपयोग कैसे करें
- जावा डाटाटेप्स, लूप्स, एरेस, स्विच एंड एसेसरीज
- जावा स्ट्रिंग लंबाई () उदाहरणों के साथ विधि
- जावा को कैसे उपयोग करें स्ट्रींग विधि?
- सेलेनियम डेटाबेस परीक्षण (WebDriver और JDBC API का उपयोग करके)