作者JeremyJoung (J.J.)
看板java
标题Re: [问题] 如何抓到刚存入资料库的那笔ID
时间Sat Oct 1 03:42:22 2011
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