Redian新闻
>
JDBC如何获取新加入的记录的索引
avatar
JDBC如何获取新加入的记录的索引# Java - 爪哇娇娃
p*p
1
stmt.executeUpdate(SQL);这样返回的是新加入的记录数目,如果仅仅加入一条
而且想得到新加入的记录的索引 ,请问一般是什么方法。我现在是取最后一个,但是
这样又需要对这个table同步,比较浪费资源。
avatar
Q*g
2
啥意思?你的表总有主键吧?自己插入的纪录主键的值应该知道吧,再查一把就有了
还是说,你用了AUTO_INCREMENT的字段作主键?这样的话就是DBMS specific的函数了
比如,MySQL的话,用如下SQL语句查询:
select LAST_INSERT_ID()
这个函数返回的是当前连接最后插入的自增长字段的值,不会被其他并发连接干扰
其他DBMS也有对应的,查manual吧

【在 p***p 的大作中提到】
: stmt.executeUpdate(SQL);这样返回的是新加入的记录数目,如果仅仅加入一条
: 而且想得到新加入的记录的索引 ,请问一般是什么方法。我现在是取最后一个,但是
: 这样又需要对这个table同步,比较浪费资源。

avatar
t*s
3
如果是jdbc 3.0,可以支持检索自动产生的key
ResultSet rs = stmt.getGeneratedKeys()
if (rs.netx())
{
int key = rs.getInt();
}

【在 Q**g 的大作中提到】
: 啥意思?你的表总有主键吧?自己插入的纪录主键的值应该知道吧,再查一把就有了
: 还是说,你用了AUTO_INCREMENT的字段作主键?这样的话就是DBMS specific的函数了
: 比如,MySQL的话,用如下SQL语句查询:
: select LAST_INSERT_ID()
: 这个函数返回的是当前连接最后插入的自增长字段的值,不会被其他并发连接干扰
: 其他DBMS也有对应的,查manual吧

avatar
Q*g
4
哈,这个方便。
估计实现也就是调一调DBMS specific的SQL了,呵呵

【在 t*****s 的大作中提到】
: 如果是jdbc 3.0,可以支持检索自动产生的key
: ResultSet rs = stmt.getGeneratedKeys()
: if (rs.netx())
: {
: int key = rs.getInt();
: }

avatar
p*p
5
用了AUTO_INCREMENT的字段作主键,然后select LAST_INSERT_ID()
不清楚并发操作会有问题么,还是要锁定表



【在 Q**g 的大作中提到】
: 啥意思?你的表总有主键吧?自己插入的纪录主键的值应该知道吧,再查一把就有了
: 还是说,你用了AUTO_INCREMENT的字段作主键?这样的话就是DBMS specific的函数了
: 比如,MySQL的话,用如下SQL语句查询:
: select LAST_INSERT_ID()
: 这个函数返回的是当前连接最后插入的自增长字段的值,不会被其他并发连接干扰
: 其他DBMS也有对应的,查manual吧

avatar
u*s
6
use stored procedure and CallableStatement to get output parameter

【在 p***p 的大作中提到】
: 用了AUTO_INCREMENT的字段作主键,然后select LAST_INSERT_ID()
: 不清楚并发操作会有问题么,还是要锁定表
:
: 是

avatar
m*t
7

I don't think there is concurrency issues - last_insert_id()
is transaction local, IIRC.

【在 p***p 的大作中提到】
: 用了AUTO_INCREMENT的字段作主键,然后select LAST_INSERT_ID()
: 不清楚并发操作会有问题么,还是要锁定表
:
: 是

相关阅读
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。