我用的是MSSQL数据库表的ID是自动增长的类型是int在插入数据时我不去特意指定ID多少(貌似指定了就非法)后来需要在插入一条数据的同时得到该条数据在表中的ID请问如何得到?用JAVA代码应该如何取出?
解决方案 »
- SSH应用中整合FCKeditor文章写不到库里
- JSP按钮一次浏览多个文件
- 满分求:如何用java程序实现备份和恢复mysql数据库
- 在框架中如何实现两个页面的信息传递
- 请问谁有《JSP动态网站开发基础练习+典型案例》这本书啊?急!
- 求高手指点!一个JSP页面跳转问题!~
- resin+sqlserver出现java.lang.OutOfMemoryError怎么解决?
- java servlet如何返回数据给flash啊??
- 一个JSP编译后出现的问题,请大侠指点~!
- Java应用XFire调用c# WebService接口,传值null
- 初学STRUTS+HIBERNATE,求一个小实例
- 高手请教 急急急
int id=ResutSet.executeQuery(sql);
int id=ResutSet.executeQuery(sql);
这个方法已经试过了但是如果是重名的怎么办??而且返回的数字是查询结果的条数并不是ID数吧
PRINT( @@IDENTITY )
PRINT( @@IDENTITY )这个东西我明白但是却不知道在JAVA中怎么取出@@IDENTITY
int intResult = (int)ResultSset.ExecuteScalar( strSql );
在SQL server中,SQL语句可以用分号分开即可。Oracle则是不行。下面的code可以参考下:
String strSql = "INSERT INTO [table]( [column] ) VALUES ( 'value' );SELECT @@IDENTITY AS 'result'";
int intResult = (int)ResultSset.ExecuteScalar( strSql );
int intResult = (int)ResultSset.ExecuteScalar( strSql );
-------------------------------------------------------------------------ResultSset这个类并不是系统自己带的吧----------------------------------------------------------------------------
最好不要用自增长的ID,要么自己增长,要么用uuid我推荐uuid,任何环境下都没有问题,包括集群-----------------------------------------------------------------------------uuid是什么呢??数据库方面有许多东西是我并不知道的
CREATE PROCEDURE TT_Add
(
@变量
)
ASINSERT INTO 表名
(
)
VALUES
(
)SELECT
@@Identity AS EntryLogIDGO
user1: do insert
user2: do insert
user1: do query
user2: do queryuser1得到的id是user2的最好的办法是不要用自增主键,自己管理增长,但是也比较麻烦
或者,用uuid做主键,每次用UUID.randomUUID().toString()获得唯一的主键,这种方式不但保证无重复,还保证集群环境下无冲突
----------------------------------------------------------
这样有个问题,就是并发操作的时候,有可能产生错误.以前也遇到过这中情况.插入一条数据的时候,要修改另外一个表,而这个表的外键是第一个表的主键. 最后使用出发器解决的.
如果刚插入的可以用
sql = "select max(id列名) from 表名"
RequestSet rs = stmt.executeQuery(sql);
while(rs.next()){
System.out.println(rs.getInt(1));//这里是取得rs返回结果集的第一列的值.
}
是个苯方法.
不会出现有:
--------------插入后再查询一次获得的可不一定是正确的ID,如果两个用户同时插入了数据,顺序是:
user1: do insert
user2: do insert
user1: do query
user2: do queryuser1得到的id是user2的
--------------这样的情况。可以查SQL server的帮助
下次得去看一下UUID了。
CREATE PROCEDURE TT_Add
(
@变量
)
ASINSERT INTO 表名
()
VALUES
(
)SELECT
@@Identity AS EntryLogIDGO---------------------------------------------------这个是我看好的解决方法 但是存储过程目前我是不会写的还得回去看书了11月10日结贴吧