2013-08-01 6 views
9

से पहले रिकॉर्ड की अगली अनुक्रम संख्या एसक्यूएल मिल रही है मेरे पास TestingID चर और मेरे जावा कोड में निम्नानुसार एक एसक्यूएल स्ट्रिंग है। एसक्यूएल स्ट्रिंग का बाद में prepareStatement के लिए उपयोग किया जाएगा।जावा को सम्मिलन

int TestingID; 

String sqlInsert = "INSERT INTO TESTING VALUES(TESTING_SEQ.NEXTVAL, ?, ?)"; 
... 

MethodA(TestingID);  //passing TestingID to MethodA 

मैं TestingID में नव डाला रिकॉर्ड के अगले अनुक्रम मूल्य प्राप्त करने के लिए इतना है कि मैं एक और तरीका में उपयोग कर सकते हैं जैसा कि ऊपर दिखाया की जरूरत है।

उत्तर

24

उस दृष्टिकोण का उपयोग करके, आपको पहले नए पहचान मान के लिए पूछना चाहिए (मुझे लगता है कि आप अनुक्रमों का उपयोग कर रहे हैं)। यह एक चयन जारी करके किया जा सकता है।

// This example is for Oracle 

String sqlIdentifier = "select TESTING_SEQ.NEXTVAL from dual"; 
PreparedStatement pst = conn.prepareStatement(sqlIdentifier); 
synchronized(this) { 
    ResultSet rs = pst.executeQuery(); 
    if(rs.next()) 
    long myId = rs.getLong(1); 

उसके बाद, इसे तैयार स्थिति में एक तर्क के रूप में पास करें।

... 
String sqlInsert = "INSERT INTO TESTING VALUES(?, ?, ?)"; 
PreparedStatement pst = conn.prepareStaetment(sqlInsert); 
pst.setLong(1, myId); 
... 

उस बिंदु से, आप हमेशा अपने अनुक्रम नंबर होगा।

इन कार्यात्मक उदाहरण (कोई पकड़ या अंत में, आदि) नहीं हैं, लेकिन आप इसे कैसे करना की एक विचार दे देंगे;)

+1

शायद एक तरह से बचने के लिए है 'रिटर्निंग इन' सिंटैक्स का उपयोग करके अतिरिक्त 'चयन'। –

+1

बेशक, लेकिन मैं एक व्यावहारिक उदाहरण के लिए ओरेकल वाक्यविन्यास का उपयोग कर एक सामान्य apporoach प्रदान कर रहा हूँ। वापसी में SQL सर्वर के लिए काम नहीं करेगा, क्योंकि आपको एक ही ऑपरेशन करने के लिए संग्रहीत प्रक्रिया का उपयोग करना होगा, और आउट पैरामीटर पंजीकृत करने के लिए कॉल करने योग्य स्टेटमेंट का उपयोग करना होगा। डीबी 2 के लिए, आप केवल SYSIBM.SYSDUMMY1 पर एक चयन कर सकते हैं, और इसी तरह ... –

0

ओरेकल में आप

long myId = rs.getLong("NEXTVAL"); 

उपयोग कर सकते हैं यह असफल हो जायेगी एचएसक्यूएल के लिए। आप "NEXTVAL" जोड़कर, एसक्यूएल कथन को संशोधित कर सकते हैं।

String sqlIdentifier = "select TESTING_SEQ.NEXTVAL as NEXTVAL from dual"; 
0

नीचे दिए गए चरणों का पालन करें:

    1) create sequence in database by using the following query. 
CREATE SEQUENCE sequence_name 
[START WITH start_num] 
[INCREMENT BY increment_num] 
[ { MAXVALUE maximum_num | NOMAXVALUE } ] 
[ { MINVALUE minimum_num | NOMINVALUE } ] 
[ { CYCLE | NOCYCLE } ] 
[ { CACHE cache_num | NOCACHE } ] 
[ { ORDER | NOORDER } ]; 

उदाहरण:

CREATE SEQUENCE customers_seq 
START WITH  1000 
INCREMENT BY 1 
NOCACHE 
NOCYCLE; 

2) जाँच करें कि क्या अनुक्रम सफलतापूर्वक बनाया गया है। क्रियान्वित आदेश द्वारा:

नाम " customers_seq"

3) क्वेरी चलाने के लिए

     select * from user_sequences; 

जांच:

नमूना कार्यक्रम:

Statement stmt= connection.createStatement(); 

ResultSet rs = stmt.executeQuery("SELECT customers_seq.NEXTVAL FROM dual"); 

if (rs!=null && rs.next()) { 
int cust_id = rs.getInt(1); 
sysout(cust_id); 
rs.close(); 
} 

stmt.close(); 
con.close(); 
संबंधित मुद्दे