(ए) हमें अपना कोड दिखाएं।
(बी) कुछ ब्लॉग चर्चा और उदाहरण कोड के लिए मेरे ब्लॉग पोस्ट UUID Values From JDBC to Postgres देखें।
// Generate or obtain data to store in database.
java.util.UUID uuid = java.util.UUID.randomUUID(); // Generate a random UUID.
String foodName = "Croissant";
// JDBC Prepared Statement.
PreparedStatement preparedStatement = conn.prepareStatement("INSERT INTO food_ (pkey_, food_name_ ) VALUES (?,?)");
int nthPlaceholder = 1; // 1-based counting (not an index).
preparedStatement.setObject(nthPlaceholder++, uuid);
preparedStatement.setString(nthPlaceholder++, foodName);
// Execute SQL.
if (!(preparedStatement.executeUpdate() == 1)) {
// If the SQL reports other than one row inserted…
this.logger.error("Failed to insert row into database.");
}
(ग) मुझे यकीन है कि आप
नवीनतम जावा JDBC चालकों द्वारा क्या मतलब postgres देशी रूप UUIDs का समर्थन करने के
कौन सा चालक का दावा के लिए नहीं कर रहा हूँ? Postgres, current/legacy one के लिए कम से कम दो ओपन-सोर्स जेडीबीसी ड्राइवर हैं और एक नया रीराइट "next generation" one है। और अन्य वाणिज्यिक ड्राइवर भी हैं।
"मूल रूप से"? क्या आप प्रलेखन से लिंक कर सकते हैं? एसक्यूएल स्पेक में UUID (दुर्भाग्य से ☹) के लिए कोई डेटा प्रकार नहीं है, इसलिए JDBC spec में यूयूआईडी के लिए कोई डेटा प्रकार नहीं है। एक कामकाज के रूप में, पोस्टग्रेज़ के लिए जेडीबीसी चालक setObject
और getObject
तैयार किए गए प्लेटफॉर्म पर विधियों का उपयोग यूयूआईडी को जावा ↔ एसक्यूएल ↔ पोस्टग्रेस के बीच चक्कर में ले जाता है। ऊपर उदाहरण कोड देखें।
PreparedStatement JDBC doc के रूप में कहते हैं:
मनमाना पैरामीटर प्रकार रूपांतरण के लिए आवश्यक हैं, तो विधि setObject लक्ष्य एसक्यूएल प्रकार के साथ प्रयोग किया जाना चाहिए।
शायद "मूल रूप से", आपने यूयूआईडी के लिए पोस्टग्रेस के मूल समर्थन को जेडीबीसी के साथ एक यूआईआईडी डेटा प्रकार वाले डेटा प्रकार के रूप में भ्रमित कर दिया। पोस्टग्रेस वास्तव में यूयूआईडी को डेटा प्रकार के रूप में समर्थन देता है, जिसका अर्थ यह है कि मान को कई बार के बजाय 128-बिट्स के रूप में संग्रहीत किया जाता है, यदि इसे एएससीआईआई या यूनिकोड हेक्स स्ट्रिंग के रूप में संग्रहीत किया जाता है। और देशी होने का मतलब है कि पोस्टग्रेस जानता है कि उस प्रकार के कॉलम पर एक इंडेक्स कैसे बनाया जाए।
ऊपर वर्णित मेरे ब्लॉग पोस्ट का मुद्दा यह था कि मुझे आश्चर्य हुआ कि Java ↔ SQL ↔ Postgres
के बीच उस चक्कर को पुल करना कितना आसान है। मेरे पहले अशिक्षित प्रयासों में, मैं बहुत मेहनत कर रहा था।
Postgres UUID समर्थन के बारे में एक टिप्पणी ... Postgres, कैसे स्टोर सूचकांक, और मौजूदा UUID मूल्यों को पुनः प्राप्त करने को जानता है। यूयूआईडी मान उत्पन्न करने के लिए, आपको पोस्टग्रेस एक्सटेंशन (प्लगइन) uuid-ossp
सक्षम करना होगा। यह एक्सटेंशन a library provided by The OSSP Project को विभिन्न प्रकार के यूयूआईडी मान उत्पन्न करने के लिए लपेटता है। my blog for instructions देखें।
वैसे ...
तो मुझे पता था कि कैसे JDBC विशेषज्ञ समूह या JSR टीम याचिका दायर करने के JDBC UUID के बारे में पता करने के लिए, मैं निश्चित रूप से होगा। वे सिर्फ JSR 310: Date and Time API में नए दिनांक-समय प्रकारों को परिभाषित करने के लिए कर रहे हैं।
इसी तरह, अगर मुझे पता था कि यूयूआईडी डेटा प्रकार जोड़ने के लिए एसक्यूएल मानकों समिति को कैसे याचिका दी जाए, तो मैं चाहता हूं। लेकिन जाहिर है कि समिति सोवियत पोलित ब्यूरो से अधिक गुप्त है और एक ग्लेशियर की तुलना में धीमी है।
PGobject toInsertUUID = new PGobject();
toInsertUUID.setType("uuid");
toInsertUUID.setValue(uuid.toString());
PreparedStmt stmt = conn.prepareStatement(query);
stmt.setObject(placeHolder,toInsertUUID);
stmt.execute();
इस तरह से आप प्रकार कास्टिंग करने से अपने आप को रोक दिया जाएगा:
कोशिश आप वास्तविक PreparedStatement आप को चलाने के लिए कोशिश कर रहे हैं पोस्ट कर सकते हैं? – Rafael