如何获取sqlserver2005的自增主键值?

eidolon_warrior 2011-03-18 08:27:21
现有系统环境java+sqlserver2000 jdbc2.0

现在有个系统要集成进来,是sqlserver2005的,要在2005数据库中增加记录并用到自动获取自增主键值。
              String sql ="insert tb(..)values() ";

              Class.forName(driver).newInstance();
connection = DriverManager.getConnection(url, user, password);
Statement stmt = connection.createStatement();

stmt.execute(sql);
//这个在jdbc3.0下应该没问题,但用jdbc2.0不行
              stmt.executeUpdate(sql, Statement.RETURN_GENERATED_KEYS);

如何用jdbc2.0的方法,在sqlserver2005中插入数据时,自动获取插入后自增主键的值呢?

谢谢!

...全文
401 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
ajaxUser002 2011-03-18
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 colachens 的回复:]
在这个事务里加入一条查询
select @@identity
[/Quote]

+1
eidolon_warrior 2011-03-18
  • 打赏
  • 举报
回复
String sql ="insert into tb(f)values('v') select SCOPE_IDENTITY()";
ResultSet rs = stmt.executeQuery(sql);
int keyValue = -1;
if (rs.next()) {
keyValue = rs.getInt(1);
}


这是解决办法,谢谢各位大虾!
eidolon_warrior 2011-03-18
  • 打赏
  • 举报
回复
就是取当前插入的这条记录后,这条记录的主键值;取主键是为了插入关联的子表数据
zn85600301 2011-03-18
  • 打赏
  • 举报
回复
你是取自增主键值的目的是什么

是取当前最大的自增主键值 还是下次的自增主键值
eidolon_warrior 2011-03-18
  • 打赏
  • 举报
回复
对sqlserver还不太了解,
select @@identity是放入sql插入语句的后面吗? 这样用executeQuery()还是executeUpdate()??
又该如何获取该值呢?
colachens 2011-03-18
  • 打赏
  • 举报
回复
在这个事务里加入一条查询
select @@identity
zk77zyy 2011-03-18
  • 打赏
  • 举报
回复
这个没弄过
cheniqit1 2011-03-18
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 emon123 的回复:]

ResultSet rs = pstmt.getGeneratedKeys();
[/Quote]
eidolon_warrior 2011-03-18
  • 打赏
  • 举报
回复
楼上兄弟,jdbc2.0好像不支持这种方法,我的代码中用的就是这种办法,提示
java.lang.AbstractMethodError: com.microsoft.jdbc.base.BaseStatement.executeUpdate(Ljava/lang/String;I)I

是sqlserver版本和驱动的问题,我是想能不能在jdbc2.0的驱动下获取sqlserver2005的自增主键值??
emon123 2011-03-18
  • 打赏
  • 举报
回复
ResultSet rs = pstmt.getGeneratedKeys();

81,094

社区成员

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

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