2011-08-23 18 views
7

我得到這個錯誤時,我正在做一個新的角色到我的遊戲,在CreateCharHandler它發送「saveToDb(false);」但當我與另一個字符ingame我手動創建我可以saveToDb(真);沒有錯誤。請幫助,爲什麼會發生這種情況?SQLException - 生成的密鑰沒有請求(MySQL)

http://i56.tinypic.com/oh1pn5.png

SaveToDb方法 http://pastebin.com/9sT5XBxp

線3514是 結果集RS = ps.getGeneratedKeys();

在此先感謝!

+0

您好查理,因爲外部鏈接往往會衰減並消失(尤其是pastebin),所以最好在您的問題中直接顯示代碼和圖片。您可以通過單擊評論框上方的編輯來完成此操作。 – James

回答

28

SQLException中明確指出:

你需要指定Statement.RETURN_GENERATED_KEYSStatement.executeUpdate()Connection.prepareStatement()

這是可以實現如下(上Connection.prepareStatement()方法增加一個額外的值):

String SQL = ""; //whatever my String is 
PreparedStatement ps = connection.prepareStatement(SQL, Statement.RETURN_GENERATED_KEYS); 
ps.setString(1, "value"); 
//Other necessary ps.setXXX() methods 

//now update 
ps.executeUpdate(); 

ResultSet rs = ps.getGeneratedKeys(); 

Statement.RETURN_GENERATED_KEYS在這裏是關鍵。

希望這會有所幫助!

PS:Useful resource


@Charlie伯格,因爲你喜歡偷懶,我改線13你的代碼以包括Statement.RETURN_GENERATED_KEYS

ps = con.prepareStatement("INSERT INTO characters (level, fame, str, dex, luk, `int`, exp, hp, mp, maxhp, maxmp, sp, ap, gm, skincolor, gender, job, hair, face, map, meso, hpMpUsed, spawnpoint, party, buddyCapacity, messengerid, messengerposition, mountlevel, mounttiredness, mountexp, equipslots, useslots, setupslots, etcslots, monsterbookcover, watchedcygnusintro, vanquisherStage, dojopoints, lastDojoStage, finishedDojoTutorial, vanquisherKills, matchcardwins, matchcardlosses, matchcardties, omokwins, omoklosses, omokties, givenRiceCakes, partyquestitems, jailtime, accountid, name, world) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", Statement.RETURN_GENERATED_KEYS); 

此外,Statement類是包java.sql(確保你正確導入的)。 :-)

+0

感謝您的幫助! 但不幸的是我不明白-facepalm-你能告訴我什麼改變我的代碼和不幸承諾我會學習:D。 Tyty –

+0

@Charlie berg,只需將第13行更改爲此(請參閱我是如何將'Statement.RETURN_GENERATED_KEYS'添加到您的'con.prepareStatement'。 –

+0

TY SO MUCH:D!您是一個真正的紳士哈哈 –