2012-02-05 2 views
5

का उपयोग कर एक्सेल फ़ाइल से डेटाबेस में डेटा अपलोड करना मुझे जावा का उपयोग कर डेटाबेस में एक्सेल शीट में डेटा अपलोड करने की आवश्यकता है।जावा

डेटाबेस ऑरैकल होगा।

एक्सेल शीट एक वेब अनुप्रयोग (वसंत MVC सामने के छोर) का उपयोग कर एक उपयोगकर्ता द्वारा एक महीने में एक बार अपलोड किया जाएगा।

एक्सेल शीट में हजारों रिकॉर्ड/पंक्तियां होंगी उदा। लगभग 15000 या उससे अधिक।

  1. डेटाबेस में इस विशाल डेटा को अपलोड करने का सबसे तेज़ तरीका क्या है? हम साधारण जेडीबीसी (स्प्रिंग के जेडीबीसी टेम्पलेट) का उपयोग कर हैं।
  2. हम लेनदेन रेत त्रुटियों को कैसे संभालेंगे क्योंकि डेटा अपलोड करते समय त्रुटियां हो सकती हैं, जिसमें आंशिक रूप से अपलोड किया गया डेटा बेकार होगा?
  3. हम त्रुटि के उपयोगकर्ता को सूचित करने के लिए इतना है कि वह एक्सेल शीट ठीक करें और फिर कोशिश कर सकते हैं सक्षम करने की आवश्यकता है?

कृपया मदद/

+0

जावा में कोई तीसरा पक्ष टूल या एपिस है जो अपलोड करने की प्रक्रिया को तेज करेगा। कृपया ध्यान रखें कि यह एक वेब आधारित अनुप्रयोग है। इसलिए, वेब अनुप्रयोग पर एकीकृत करने के लिए whetever उपकरण आसान होना चाहिए। – ashishjmeshram

उत्तर

1

आप फ़ाइल के प्रसंस्करण के लिए Apache POI - the Java API for Microsoft Documents उपयोग कर सकते हैं, और फिर अपने डेटाबेस में डेटा सम्मिलित करने के लिए सादे JDBC का उपयोग करें।

यह काफी तेजी से होगा, और आप त्रुटियों के बारे में उपयोगकर्ता को सचेत करने सभी अपवादों को पकड़ कर सकते हैं।

0

पहला सवाल का संबंध है, मुझे लगता है कि सबसे अच्छा समाधान .csv प्रारूप (अल्पविराम से अलग-मूल्य) है कि बहुत सरल पार्स किया जा सकता है में एक्सेल फ़ाइल को रूपांतरित करने है। मुझे यकीन नहीं है कि मदद कर सकता है, लेकिन मुझे यह link मिला।

अपवाद संचालन के लिए, @ExceptionHandler एनोटेशन कि हो सकता है आप मदद कर सकते हैं करने के लिए एक नजर है।

+0

उत्तर के लिए धन्यवाद। लेकिन क्या यह सबसे तेज़ तरीका है? मैं त्रुटियों के उपयोगकर्ताओं को कैसे सूचित करूं ताकि वे त्रुटियों को सही कर सकें और फिर एक्सेल अपलोड कर सकें? – ashishjmeshram

0

डिस्क पर लिखें और ऑरैकल से थोक आयात करें। त्रुटियों को पार्स करें और उन्हें उपयोगकर्ता को वापस कर दें।

1

आप किस ऑरैक संस्करण का उपयोग करते हैं? यदि आपको उस उपयोग के मामले के लिए केवल एक वेब एप्लिकेशन की आवश्यकता है, तो शायद एपेक्स इसे आपका मित्र बना सकता है। ओरेकल 11 जी से शुरू होने पर इसे डेटाबेस के साथ पूर्वस्थापित किया जाएगा, 9i से आप इसे अपने आप इंस्टॉल कर सकते हैं। यह एक्सेल का एक बहुत अच्छा एकीकरण लाता है, इस प्रकार शुरुआती लोगों के लिए, कुछ दिनों में एक आवेदन बनाने के लिए यह आसान होगा।

0

आप jExcelAPI या Apache POI का उपयोग कर सकते हैं जो निःशुल्क हैं या आप Aspose cells के लिए भुगतान कर सकते हैं जो कि यदि आप किसी कंपनी के लिए काम कर रहे हैं तो यह महंगा नहीं है।

इनमें से प्रत्येक बहुत उपयोगी हो सकता है। उदाहरण के लिए, आप त्रुटियों को देखने के लिए लाइब्रेरी का उपयोग कर सकते हैं, फिर CSV में कनवर्ट कर सकते हैं, और आखिरकार डेटाबेस में डालने के लिए जेडीबीसी का उपयोग कर सकते हैं।

यदि आपके एक्सेल शीट्स आपके जैसे बड़े हैं, तो एक ही समय में स्मृति में सब कुछ लोड न करने के लिए सावधान रहें अन्यथा आप ढेर स्थान से बाहर हो सकते हैं। पूरे प्रक्रिया में अपना कचरा इकट्ठा करो।

0

कितने प्रत्येक जानकारी के स्तंभ आपके डेटा शीट में और कितना बड़ा प्रत्येक कोशिका में डेटा है? अपाचे पीओआई का उपयोग कर जावा ऑब्जेक्ट्स में कनवर्ट करने के बाद यह आपके हेप को फिट करने के लिए मेमोरी खपत का पता लगा सकता है।

फिर आप डेटा डालने का प्रयास कर डेटाबेस लेनदेन शुरू कर सकते हैं।किसी भी त्रुटि के मामले में, लेनदेन वापस लुढ़का जाएगा और आप उपयोगकर्ता को सही करने के लिए शीट में गलत डेटा दर्ज कर सकते हैं।

0

वाट वास्तव में आपको क्या करना चाहिए है,

1) एक्सएमएल करने के लिए माइक्रोसॉफ्ट एक्सेल दस्तावेज रूपांतरण के लिए उपयोग Apache POI। यह आपको ओपनएक्सएमएल प्रारूप कार्यालय देता है। एक बार जब आप इसे प्राप्त कर लेंगे। इसे फाइल सिस्टम में स्टोर करें। 2) उपयोगकर्ता को आयात करने के लिए उपयोगकर्ता को एक लिंक प्रदान करें 3) आयात करने पर क्लिक करने के बाद, आप क्वार्ट्ज नौकरी शुरू करते हैं। जब से तुम वसंत http://static.springsource.org/spring/docs/1.2.x/reference/scheduling.html

4) का उपयोग कर रहे आप नौकरी कक्षा में अपने XML निकासी शुरू हुई और फिर एक transcation (हाइबरनेट) शुरू करते हैं। प्रत्येक

वसंत में नए लेनदेन शुरू करने के बाद।

DefaultTransactionDefinition def = new DefaultTransactionDefinition(); 
def.setName("ImportFileTransaction"); 
def.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRED); 

TransactionStatus status = txManager.getTransaction(def); 

के बाद प्रत्येक प्रतिबद्ध

txManager.commit(status); 
status = txManager.getTransaction(def); 

लेनदेन का दर्जा मिल और

5) डालने को अधिसूचित उपयोगकर्ता त्रुटि एक्सएमएल बनाए रखने के लिए इतना है कि पंक्ति tht एक त्रुटि उस xml में सम्मिलित किया जाता है है के लिए cntinue ।

आनंद लें !!!!

0

मैंने वही काम किया है जो आपने पूछा है। मैंने निम्नलिखित चरणों को

  1. सहेजी गई फ़ाइल @ सर्वर किया।
  2. प्रयुक्त POI जार क्योंकि यह अधिकतम xls सुविधाओं का समर्थन
  3. तालिका संरचना
  4. सेटर विधि में मान्यता एप्लाइड, कि (प्रकार के संग्रह में डेटा को सेट करने के दौरान मूल्य की जाँच करेगा वर्ग क्या बनाई गई है के अनुसार एक जावा वर्ग बनाया गया), अपवाद को संभालने और अनुकूलित संदेश के लिए रिश्तेदार कोड के साथ अपवाद thorw (उपयोगकर्ता अंत दिखाने के लिए)।
  5. एक बार सभी रिकॉर्ड मान्य होने के बाद दूसरे स्तर को मान्य करने के लिए डेटा बेस मारा जाता है जैसे किसी दिए गए नाम के लिए आईडी प्राप्त करें। त्रुटि कोड का उपयोग कर फिर से अपवाद संभाल लें।
  6. डेटाबेस में डेटा डालने के लिए एक सम्मिलित क्वेरी टेम्पलेट बनाएं तैयार वक्तव्य का उपयोग करने का प्रयास करें क्योंकि यह SQL इंजेक्शन के लिए थोड़ा सा सुरक्षित है।
  7. अच्छा तरीका अगर रिकॉर्ड बहुत बड़ी है हाइबरनेट या किसी अन्य हठ सेवा का उपयोग करने, क्योंकि यह सुरक्षित और लेनदेन प्रबंधन, या JDBC के लिए बैच क्वेरी का उपयोग अंत में प्रतिबद्ध करने के लिए करता है, तो सब बात किसी और ठीक बस लेन-देन

रोलबैक है (15000 इतना बड़ा नहीं है), फिर आपको विभिन्न बैच में नौकरी विभाजित करें और इसे थ्रेड द्वारा नियंत्रित करें।