2010-05-18 10 views
8

मैं एक सम्मिलित क्वेरी का उपयोग कर तालिका में सबसे हाल ही में अद्यतन मान पुनर्प्राप्त करना चाहता हूं।sql jdbc getgeneratedkeys कॉलम "आईडी" नहीं मिलता है, कॉलम प्रकार अज्ञात

ये मेरी एसक्यूएल तालिका में डेटाटाइप हैं।

डाटाटाइप:

int(11)  // primary key auto increment, not being assigned by sqlQuery 
varchar(30) 
timestamp // has a default value. but i am explicit assigning it using CURRENT_TIMESTAMP 
varchar(300) 
varchar(300) 
varchar(300) 
int(11) 
varchar(300) 

जावा कोड

statement.executeUpdate(sqlQuery, Statement.RETURN_GENERATED_KEYS); 
    ResultSet rs = statement.getGeneratedKeys(); 
    System.out.println("here: " + rs.getMetaData().getColumnCount()); 
    System.out.println("here1: " + rs.getMetaData().getColumnName(1)); 
    // none of the following 3 works 
    System.out.println("id: " + rs.getInt(1)); 
    System.out.println("id: " + rs.getInt("GENERATED_KEY")); 
    System.out.println("id: " + rs.getInt("id")); 
    for a bit of background see [this][1] 
    `rs.getMetaData().getColumnTypeName(1)` tells me column type `UNKNOWN` 

स्टैक ट्रेस

SEVERE: null 
    java.sql.SQLException 
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1055) 
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:956) 
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:926) 
    at com.mysql.jdbc.ResultSetImpl.checkRowPos(ResultSetImpl.java:815) 
    at com.mysql.jdbc.ResultSetImpl.getStringInternal(ResultSetImpl.java:5528) 
    at com.mysql.jdbc.ResultSetImpl.getString(ResultSetImpl.java:5448) 
    [1]: http://stackoverflow.com/questions/2853066/sql-java-get-value-assigned-to-auto-increment-primary-key 
+0

का विनिर्देश स्पष्ट नहीं है? –

+0

MySQL और MySQL कनेक्टर का कौन सा संस्करण आप उपयोग कर रहे हैं? –

उत्तर

13

आपकॉल करने की आवश्यकता:

int autoIncKeyFromApi = -1; 
rs = stmt.getGeneratedKeys(); 
if (rs.next()) { 
    autoIncKeyFromApi = rs.getInt(1); 
} else { 
    // do what you have to do 
} 
System.out.println(autoIncKeyFromApi); 
+0

मैं कई संयोजनों की कोशिश कर रहा था। यह नहीं! –

+0

यह सही है, लेकिन हालांकि मैं इसे 'if' ब्लॉक के अंदर रखूंगा। यह भी देखें [यह उत्तर] (http://stackoverflow.com/questions/1915166/jdbc-how-can-we-get-inserted-record-id-in-java/1915197#1915197)। – BalusC

+0

@ बाल्लूसी आप बिल्कुल सही हैं। फिक्स्ड। –

2

शायद ऐसा इसलिए है क्योंकि sqlQuery कोई नया रिकॉर्ड नहीं बनाता है! इस मामले में, यह एक खाली परिणामसेट वापस प्राप्त करेगा GetGeneratedKeys()

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