2009-05-12 12 views
5

में जेडीबीसी डालने पर ऑटो उत्पन्न कुंजी ऑटो क्या कोई सामान्य, क्रॉस आरडीएमएस है, जिस तरह से मैं एक जेडीबीसी सम्मिलन पर एक प्रमुख ऑटो उत्पन्न कर सकता हूं? उदाहरण के लिए अगर मैं एक प्राथमिक कुंजी, आईडी के साथ एक मेज, और एक पूर्णांक मूल्य:एसक्यूएल सर्वर

create table test (
    id int not null, 
    myNum int null 
) 

और एक डालने

PreparedStatement statement = connection.prepareStatement("insert into test(myNum) values(?)", Statement.RETURN_GENERATED_KEYS); 
statement.setInt(1, 555); 
statement.executeUpdate(); 
     statement.close(); 

कर मैं एक java.sql.SQLException मिलती है: मूल्य सम्मिलित नहीं कर सकते कॉलम 'आईडी' में न्यूल।

मुझे लगता है कि यह पूरी तरह से आरडीएमएस निर्भर है। हम SQL सर्वर 2005 का उपयोग कर उपयोग कर रहे हैं और मैंने

CONSTRAINT [PK_test] PRIMARY KEY CLUSTERED 
(
    [id] ASC 
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, FILLFACTOR = 1) ON [PRIMARY] 

कोई भाग्य के साथ तालिका में सेट किया है।

उत्तर

6

यह पूरी तरह से डेटाबेस निर्भर है। दो मुख्य विकल्प हैं: 1 - डीबीएमएस जो प्राथमिक कुंजी परिभाषा के आगे एक ऑटो-वृद्धि कीवर्ड और 2 - डीबीएमएस जो अनुक्रम जनरेटर प्रदान करते हैं (जिसे आप पीके के लिए नए मान उत्पन्न करने के लिए उपयोग कर सकते हैं, उदाहरण के लिए, सम्मिलन पूरा करने से पहले "डालने से पहले" ट्रिगर स्वचालित रूप से कॉलम में नए मान को सम्मिलित करता है)।

जहां तक ​​मुझे पता है:

  1. Firebird दृश्यों का उपयोग करता
  2. डीबी 2 के रूप में "द्वारा डिफ़ॉल्ट पहचान उत्पन्न" एक स्तंभ परिभाषित करने के लिए अनुमति देता है;
  3. Interbase दृश्यों (बुलाया जनरेटर)
  4. MySQL "AUTO_INCREMENT" खंड
  5. ओरेकल दृश्यों
  6. PostgreSQL दृश्यों का उपयोग करता
  7. SQLServer है का उपयोग करता है "पहचान (1,1)" खंड
का उपयोग करता है
+0

डीबी 2 के लिए आप पहचान कॉलम और अनुक्रम के बीच चयन कर सकते हैं। मैं यह भी अन्य rdbms 'के लिए इस मायने रखता है। स्पष्टीकरण के लिए – rudolfson

+0

धन्यवाद। हालांकि यह अन्य rdbms के लिए गिनती नहीं है। कम से कम ओरेकल के लिए नहीं। –

1

जहाँ तक मुझे पता है कि यह डेटाबेस निर्भर है। इसी प्रकार टाइमस्टैम्प डालने के साथ; जब आप एक शून्य डालते हैं तो कुछ वर्तमान समय डालेंगे।

2

आपको पहचान तालिका को ऑटोक्रेट करने के लिए परीक्षण तालिका में आईडी कॉलम सेट करने की आवश्यकता है। SQL सर्वर के मामले में, आपको आईडी कॉलम पर IDENTITY() संपत्ति सेट करने की आवश्यकता है।

2

यह डेटाबेस निर्भर है। ओरेकल को एक वर्ग की आवश्यकता होती है और MySQL पर आप कॉलम को स्वतः वृद्धि के रूप में सेट करते हैं।

आप हमेशा हाइबरनेट का उपयोग कर सकते हैं।

+0

इसे थोड़ा और समझाने के लिए - हाइबरनेट का उपयोग करके आप डीडीएल उत्पन्न कर सकते हैं या यहां तक ​​कि हाइबरनेट को स्टार्टअप पर सभी मैप किए गए टेबल भी बना सकते हैं। आपको उचित "बोलीभाषा" का उपयोग करके लक्ष्य डेटाबेस को हाइबरनेट को बताना होगा। – rudolfson

संबंधित मुद्दे