在插入数据后,如何得知其ID

keephope 2006-10-23 09:28:49
我用的是MSSQL数据库

表的ID是自动增长的

类型是int

在插入数据时我不去特意指定ID多少

(貌似指定了就非法)

后来需要在插入一条数据的同时

得到该条数据在表中的ID

请问如何得到?

用JAVA代码应该如何取出?
...全文
614 32 打赏 收藏 转发到动态 举报
写回复
用AI写文章
32 条回复
切换为时间正序
请发表友善的回复…
发表回复
keephope 2006-11-07
  • 打赏
  • 举报
回复
用存储过程,添加成功以后回产生一个ID
CREATE PROCEDURE TT_Add
(
@变量
)
AS

INSERT INTO 表名
(

)
VALUES
(


)

SELECT
@@Identity AS EntryLogID

GO

---------------------------------------------------

这个是我看好的解决方法

但是存储过程目前我是不会写的

还得回去看书了

11月10日结贴吧
liltos 2006-11-04
  • 打赏
  • 举报
回复
这个问题困扰了很久,想了很多办法,可还是没搞定。
下次得去看一下UUID了。
daizhenbest 2006-11-03
  • 打赏
  • 举报
回复
ID不能认为指定

只允许数据库自己生成

目前我只能时候插入后再查询一次

并且按照降序排列

才能保证获得刚插入的数据的ID
----------------------------------------------------------
这样有个问题,就是并发操作的时候,有可能产生错误.

以前也遇到过这中情况.插入一条数据的时候,要修改另外一个表,而这个表的外键是第一个表的主键. 最后使用出发器解决的.
wyhlgx 2006-11-03
  • 打赏
  • 举报
回复
简单,你在用JAVA进行插入的时候,在代码前面定义一个用来接受的字符串数组,每插入一条成功后,就select id出来,然后放到字符串数组里,等下要的时候,就去取就是了。Do you know?
bgu 2006-11-03
  • 打赏
  • 举报
回复
SQL server 里的 @@IDENTITY 是线程安全的。
不会出现有:
--------------

插入后再查询一次获得的可不一定是正确的ID,如果两个用户同时插入了数据,顺序是:
user1: do insert
user2: do insert
user1: do query
user2: do query

user1得到的id是user2的
--------------

这样的情况。

可以查SQL server的帮助
fynshmily 2006-11-03
  • 打赏
  • 举报
回复
写错了.
ResultSet
hehe
fynshmily 2006-11-03
  • 打赏
  • 举报
回复
是刚插如的吗?
如果刚插入的可以用
sql = "select max(id列名) from 表名"
RequestSet rs = stmt.executeQuery(sql);
while(rs.next()){
System.out.println(rs.getInt(1));//这里是取得rs返回结果集的第一列的值.
}
是个苯方法.
daichenghua 2006-11-02
  • 打赏
  • 举报
回复
用存储过程,添加成功以后回产生一个ID
CREATE PROCEDURE TT_Add
(
@变量
)
AS

INSERT INTO 表名
(

)
VALUES
(


)

SELECT
@@Identity AS EntryLogID

GO
hohowu 2006-11-02
  • 打赏
  • 举报
回复
oracle 下还有sequence可以用.

keephope 2006-11-02
  • 打赏
  • 举报
回复
ID不能认为指定

只允许数据库自己生成

目前我只能时候插入后再查询一次

并且按照降序排列

才能保证获得刚插入的数据的ID
廖雪峰 2006-11-02
  • 打赏
  • 举报
回复
插入后再查询一次获得的可不一定是正确的ID,如果两个用户同时插入了数据,顺序是:
user1: do insert
user2: do insert
user1: do query
user2: do query

user1得到的id是user2的

最好的办法是不要用自增主键,自己管理增长,但是也比较麻烦
或者,用uuid做主键,每次用UUID.randomUUID().toString()获得唯一的主键,这种方式不但保证无重复,还保证集群环境下无冲突
iwlk 2006-11-02
  • 打赏
  • 举报
回复
select @@IDENTITY
cseu 2006-11-01
  • 打赏
  • 举报
回复
自己在类中加个id属性不就行了
Sunny319 2006-11-01
  • 打赏
  • 举报
回复
mark
keephope 2006-11-01
  • 打赏
  • 举报
回复
String strSql = "INSERT INTO [table]( [column] ) VALUES ( "value" );SELECT @@IDENTITY AS 'result'";
int intResult = (int)ResultSset.ExecuteScalar( strSql );
-------------------------------------------------------------------------

ResultSset这个类并不是系统自己带的吧

----------------------------------------------------------------------------
最好不要用自增长的ID,要么自己增长,要么用uuid

我推荐uuid,任何环境下都没有问题,包括集群

-----------------------------------------------------------------------------

uuid是什么呢??

数据库方面有许多东西是我并不知道的
廖雪峰 2006-10-31
  • 打赏
  • 举报
回复
最好不要用自增长的ID,要么自己增长,要么用uuid

我推荐uuid,任何环境下都没有问题,包括集群
bgu 2006-10-31
  • 打赏
  • 举报
回复
Insert后,可以用这个系统变量得到:@@IDENTITY

You can try:

INSERT INTO [table]( [column] ) VALUES ( "value" )
PRINT( @@IDENTITY )
keephope 2006-10-31
  • 打赏
  • 举报
回复
而且最重要的是

ResutSet.executeQuery(sql);

根本就没有这个方法

我试过类似的思路

依然是不行的

当ID是唯一,而名字不唯一的时候

如何获得其ID呢?
bgu 2006-10-31
  • 打赏
  • 举报
回复
Java我不是很懂。哈。不过既然你是用SQL server那就是一样D。
在SQL server中,SQL语句可以用分号分开即可。Oracle则是不行。

下面的code可以参考下:
String strSql = "INSERT INTO [table]( [column] ) VALUES ( 'value' );SELECT @@IDENTITY AS 'result'";
int intResult = (int)ResultSset.ExecuteScalar( strSql );
bgu 2006-10-31
  • 打赏
  • 举报
回复
String strSql = "INSERT INTO [table]( [column] ) VALUES ( "value" );SELECT @@IDENTITY AS 'result'";
int intResult = (int)ResultSset.ExecuteScalar( strSql );
加载更多回复(12)
内容概要:SSD2828QN4是一款MIPI主桥接芯片,用于连接应用处理器与传统并行LCD接口及支持MIPI从属接口的LCD驱动器。该芯片支持最高每通道1Gbps的串行链路速度,最多可配置4个数据通道,显著减少了信号数量。它支持多种接口模式,包括RGB+SPI组合接口,适用于驱动智能或非智能显示面板,并能通过命令模式和视频模式传输数据。芯片内置时钟和复位模块、外部接口、协议控制单元(PCU)、包处理单元(PPU)、错误校正码/循环冗余校验(ECC/CRC)模块、长包和命令缓冲区、D-PHY控制器、模拟收发器以及内部锁相环(PLL),确保了高效的数据传输和系统稳定性。此外,文档详细描述了芯片的引脚分配、寄存器设置、操作模式、电源序列、时序特性等关键参数,为开发者提供了全面的技术指导。 适合人群:具备一定硬件设计基础,从事嵌入式系统开发、显示技术研究的研发人员。 使用场景及目标:①实现应用处理器与MIPI兼容显示屏之间的高速数据传输;②优化显示系统的功耗表现,减少电磁干扰(EMI);③通过灵活配置不同接口模式来适应各种显示设备的需求。 阅读建议:此文档面向具有一定电子工程背景的专业人士,建议读者结合实际项目需求深入理解各章节内容,特别是关于寄存器配置、时序要求等方面的具体说明。对于初次接触此类技术的开发者而言,建议先熟悉基本概念再逐步掌握高级功能的应用方法。

81,111

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧