JDBC如何获取新加入的记录的索引# Java - 爪哇娇娃p*p2005-04-21 07:041 楼stmt.executeUpdate(SQL);这样返回的是新加入的记录数目,如果仅仅加入一条而且想得到新加入的记录的索引 ,请问一般是什么方法。我现在是取最后一个,但是这样又需要对这个table同步,比较浪费资源。
Q*g2005-04-21 07:042 楼啥意思?你的表总有主键吧?自己插入的纪录主键的值应该知道吧,再查一把就有了还是说,你用了AUTO_INCREMENT的字段作主键?这样的话就是DBMS specific的函数了比如,MySQL的话,用如下SQL语句查询:select LAST_INSERT_ID()这个函数返回的是当前连接最后插入的自增长字段的值,不会被其他并发连接干扰其他DBMS也有对应的,查manual吧【在 p***p 的大作中提到】: stmt.executeUpdate(SQL);这样返回的是新加入的记录数目,如果仅仅加入一条: 而且想得到新加入的记录的索引 ,请问一般是什么方法。我现在是取最后一个,但是: 这样又需要对这个table同步,比较浪费资源。
t*s2005-04-21 07:043 楼如果是jdbc 3.0,可以支持检索自动产生的keyResultSet rs = stmt.getGeneratedKeys()if (rs.netx()){int key = rs.getInt();}【在 Q**g 的大作中提到】: 啥意思?你的表总有主键吧?自己插入的纪录主键的值应该知道吧,再查一把就有了: 还是说,你用了AUTO_INCREMENT的字段作主键?这样的话就是DBMS specific的函数了: 比如,MySQL的话,用如下SQL语句查询:: select LAST_INSERT_ID(): 这个函数返回的是当前连接最后插入的自增长字段的值,不会被其他并发连接干扰: 其他DBMS也有对应的,查manual吧
Q*g2005-04-21 07:044 楼哈,这个方便。估计实现也就是调一调DBMS specific的SQL了,呵呵【在 t*****s 的大作中提到】: 如果是jdbc 3.0,可以支持检索自动产生的key: ResultSet rs = stmt.getGeneratedKeys(): if (rs.netx()): {: int key = rs.getInt();: }
p*p2005-04-21 07:045 楼用了AUTO_INCREMENT的字段作主键,然后select LAST_INSERT_ID()不清楚并发操作会有问题么,还是要锁定表是【在 Q**g 的大作中提到】: 啥意思?你的表总有主键吧?自己插入的纪录主键的值应该知道吧,再查一把就有了: 还是说,你用了AUTO_INCREMENT的字段作主键?这样的话就是DBMS specific的函数了: 比如,MySQL的话,用如下SQL语句查询:: select LAST_INSERT_ID(): 这个函数返回的是当前连接最后插入的自增长字段的值,不会被其他并发连接干扰: 其他DBMS也有对应的,查manual吧
u*s2005-04-21 07:046 楼use stored procedure and CallableStatement to get output parameter【在 p***p 的大作中提到】: 用了AUTO_INCREMENT的字段作主键,然后select LAST_INSERT_ID(): 不清楚并发操作会有问题么,还是要锁定表: : 是
m*t2005-04-21 07:047 楼I don't think there is concurrency issues - last_insert_id()is transaction local, IIRC.【在 p***p 的大作中提到】: 用了AUTO_INCREMENT的字段作主键,然后select LAST_INSERT_ID(): 不清楚并发操作会有问题么,还是要锁定表: : 是