2010-06-16 11 views
5

में BigInteger मानों को कैसे स्टोर करें I JDBC का उपयोग कर जावा प्रोग्राम को ओरेकल डेटाबेस से कनेक्ट किया है। मैं डेटाबेस में BigInteger मान (512 बिट्स) स्टोर करना चाहता हूं। कॉलम का प्रकार क्या होना चाहिए?ओरेकल डेटाबेस

मैं इस तरह की कोशिश कर रहा हूँ:

मैं डेटाबेस में संख्या प्रकार का एक स्तंभ ले लिया है।

मैं BigDecimal इस तरह के BigInteger परिवर्तित:

BigInteger b=new BigInteger("5779857570957802579079"); 
Number n =b; 
BigDecimal d=(BigDecimal)n; 

PreparedStatement pstmt=con.prepareStatemant("insert into database values(?,?)"); 
pstmt.setString(1,"john"); 
pstmt.setBigDecimal(2,d); 

मैं निम्नलिखित अपवाद हो रही है:

 
javax.servlet.ServletException: java.lang.ClassCastException: java.math.BigInteger cannot be cast to java.math.BigDecimal 
root cause 

java.lang.ClassCastException: java.math.BigInteger cannot be cast to java.math.BigDecimal 

क्या इस कोड स्निपेट में गलत है? यदि ऐसा है, तो कृपया अन्य विधियों का सुझाव दें।

+0

सूचियों के साथ आपके सवाल का फ़ॉर्मेट करें के लिए। कुछ पॉइंटर्स [यहां] (http://stackoverflow.com/editing-help) – bdhar

+0

क्या मैं बिगडिसीमल को NUMBER प्रकार – condinya

उत्तर

0

मैं सीधे अपने सवाल का जवाब नहीं कर रहा हूँ, लेकिन मैं केवल एक ओरेकल डेटाप्रकार है कि एक 512 बिट संग्रहीत कर सकते हैं देखें: varchar2 (156) (156 = abs (लॉग (2^512)) + 2)

तो मैं बिगिनटेगर को एक बड़े पैमाने पर एक स्ट्रिंग में परिवर्तित कर दूंगा।

+0

मैंने वर्कर 2 (4000) का उपयोग किया और यह काम कर रहा है। – condinya

+0

एक 'रॉ (64)' भी काम करेगा। –

3

बिगइंटर और बिगडिसीमल दोनों जावा.लांग नम्बर का विस्तार करते हैं, हालांकि इसका मतलब यह नहीं है कि आप BigInteger से लेकर संख्या तक बिगडिसीमल तक कास्ट कर सकते हैं।

BigDecimal में एक निर्माता है कि एक BigInteger लेता नहीं है, इसलिए कोशिश:

BigDecimal d = new BigDecimal(b); 
+0

के कॉलम में संग्रहीत कर सकता हूं, लेकिन मैंने कोशिश की लेकिन मुझे एक और अपवाद मिल रहा है। javax.servlet.ServletException: java.sql.SQLException: [ओरेकल] [ओडीबीसी] अमान्य परिशुद्धता मान। मूल कारण java.sql.SQLException: [ओरेकल] [ओडीबीसी] अमान्य परिशुद्धता मान – condinya

+0

संभव है कि जिस कॉलम में आप डालने वाले कॉलम का प्रकार BigDecimal स्वीकार नहीं करता है? – DaveJohnston

0

आप अपनी डीबी सीमाओं के आधार पर दशमलव/संख्यात्मक मान का उपयोग कर सकते हैं।

0

आप इस तरह से कोशिश कर सकते हैं:

oracle.sql.NUMBER numberValue = new oracle.sql.NUMBER(bigIntegerValue); 
cs.setObject(id, numberValue, OracleTypes.NUMBER); 

जहां bigIntegerValuejava.math.BigInteger का एक उदाहरण है, यह काम करता है मुझे

+0

यह अभी भी NUMBER कॉलम में फिट नहीं होगा, क्योंकि NUMBER डेटाटाइप अधिकतम 40 अंकों तक सीमित है। –