Re: [問題] 如何抓到剛存入資料庫的那筆ID

看板java作者 (J.J.)時間14年前 (2011/10/01 03:42), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串4/4 (看更多)
MySQL限定語法 SELECT LAST_INSERT_ID() AS ID FROM `table` 自動叫出這個"連線"曾經新增過的主鍵ID 另外 select max() 非常危險 如果在密集寫入的的SQL中就會出包 不難發生 如果不是MySQL又是密集寫入的話 在資料結構上的一個小技巧 建立一個旗標欄位 寫入時 隨機帶入一個亂數 之後靠該亂數取出資料 確定id後便將旗標歸零 如此一來就算是沒有任何命令一樣可以確保id 另外 oracle MS-SQL都有對應的最後寫入查詢命令 查一下就有 這是屬於SQL層級的問題 跟JAVA幾乎無關 ※ 引述《adrianshum (Alien)》之銘言: : ※ 引述《catjimmy (cat)》之銘言: : : 因為想要寫個物件導向式的類別來做資料庫的存取 : : 例如說 學生資料庫 students 在java的類別就叫做 student : : 資料表有兩個欄位id(PK,AI) name(VARCHAR) : : 我希望能做這樣的功能 : : private static int id; : : private static String name; : : public student(String name){ : : this.name = name; : : // 在student資料庫新增一筆name欄位的資料 : : PreparedStatement ps = conn.prepareStatement("INSERT INTO students : : (name, : : create_at, update_at) : : VALUES : : (?, : : CURRENT_TIMESTAMP(), : : CURRENT_TIMESTAMP())"); : : ps.setString(1, name); : : ps.excuteUpdate(); : : } : : 以上是新增一筆資料的部份,更新的部分雷同只是sql修改成update的語法因此不多 : : 佔版面,希望是在這筆資料新增後能得到剛剛寫入或更新的這筆資料的id : : 爬文跟自己做都想不出這邊要怎麼寫 : : 想來請求一下指點 如何能得到剛剛新增/修改那筆資料的id呢? : http://www.freshblurbs.com/jdbc-get-last-inserts-id : 不過, 與其自己弄, 我建議你直接去用 Hibernate 等的 ORM : tools, 你現在的做法, 一來把 persistence 的 logic 入侵 : 了 model, 二來設計上要顧及的東西太多了, 倒不如直接用人 : 家的 proven solution. : 不然, 至少把 persistence 層弄個 DAO 吧. 犯不著一定要 : create obj 就在 constructor 直接在 DB 生成 record... -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 59.120.0.157
文章代碼(AID): #1EXXkX-x (java)
討論串 (同標題文章)
文章代碼(AID): #1EXXkX-x (java)