Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

Java और JDBC का उपयोग करके BigInt MySQL कॉलम में अहस्ताक्षरित 64-बिट संख्या सम्मिलित करना

तो ये रहा समाधान:

यदि आप तैयार कथन का उपयोग नहीं करते हैं और केवल एक स्ट्रिंग SQL कथन का उपयोग करके सम्मिलित कर रहे हैं, तो आपको चिंता करने की कोई बात नहीं है क्योंकि JDBC केवल आपके कथन को MySQL सर्वर पर ले जाता है और MySQL सर्वर स्ट्रिंग को अहस्ताक्षरित 64 नंबर (बिगइंट -20) में सही ढंग से पार्स कर सकता है।

यदि आप तैयार बयान का उपयोग करते हैं, तो आप मुश्किल में हैं। यदि आप करते हैं:

BigInteger bi = new BigInteger("18446744073709551615"); // max unsigned 64-bit number
statement.setObject(2, bi, Types.BIGINT);
statement.execute();

आपको एक MySqlDataTruncation अपवाद मिलेगा क्योंकि JDBC इसे लंबे समय तक हस्ताक्षरित करना चाहता है।

यदि आप करते हैं:

BigInteger bi = new BigInteger(new Long(Long.MAX_VALUE).toString());
statement.setObject(2, bi, Types.BIGINT);
statement.execute();

यह काम करेगा क्योंकि मान जावा के हस्ताक्षरित लंबे समय के भीतर है।

तो वर्कअराउंड जो हमेशा काम करता है वह है:

BigInteger bi = new BigInteger("18446744073709551615"); // max unsigned 64-bit number
statement.setString(2, bi.toString());
statement.execute();

आप अंत में डेटा को एक स्ट्रिंग के रूप में पास करते हैं और MySQL सर्वर को इसे ठीक से पार्स करने देते हैं।

किसी को JDBC ड्राइवर को ठीक करना चाहिए क्योंकि अहस्ताक्षरित 64-बिट नंबर बहुत सारे सांख्यिकीय अनुप्रयोगों में आते रहते हैं।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Mysql Dump के साथ दृश्यों का बैकअप लेना

  2. लॉगिन प्रक्रिया में एसक्यूएल कैसे इंजेक्ट करें

  3. एकल कॉलम वाली तालिका से पहले N को छोड़कर सभी पंक्तियों को हटा दें

  4. क्वेरी अलग-अलग पंक्तियों के बजाय सब कुछ एक पंक्ति में जोड़ती है

  5. mySQL>> एक विशिष्ट GROUP_CONCAT में HREF लिंक जोड़ना