社区
Web 开发
帖子详情
使用jdbc如何得到sqlserver中identity列,最后添加的id
gucs
2003-05-14 11:36:21
使用jdbc如何得到sqlserver中identity列,最后添加的id
一个白痴的问题,大家别见笑。
...全文
433
14
打赏
收藏
使用jdbc如何得到sqlserver中identity列,最后添加的id
使用jdbc如何得到sqlserver中identity列,最后添加的id 一个白痴的问题,大家别见笑。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
14 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
gucs
2003-05-14
打赏
举报
回复
有什么解决方法?
=================
一代过去,一代又来,地却永远长存。日头出来,日头落下,急归所出之地。
风往南刮,又往北转,不住的旋落,而且返回转行原道,江河都往海里转,海
却不满,江河从何处流,仍归何处。
gucs
2003-05-14
打赏
举报
回复
多用户并发访问如何实现?
在ado中使用addnew方法,指针指几刚刚添加的记录。在jdbc中,我没有发现这样的方法。
我的意思是,能否不用再执行一次sql查询,就可以得到。
希偌
2003-05-14
打赏
举报
回复
ResultSet rs=conn.executeQuery("select top 1 id,identity from tablename order by id desc");
int i=0;
if(rs.next())
i=rs.getInt(1);
gucs
2003-05-14
打赏
举报
回复
这个问题已经没有什么再值得讨论的了,谢谢上面参加回复的朋友,结帖!
zhxx
2003-05-14
打赏
举报
回复
jdk1.4中的jdbc statement对象可以表示是否从插入中返回自动产生的值
gucs
2003-05-14
打赏
举报
回复
非常感谢楼上的回复!!!
我看java api时,只顾着看ResultSet了,没想到会在Statement中。
其实,我就是要找一个这样的方法。
我在sql联机帮助中找到的方法,只适用于sql server。
还是你提供的方法好。
=================
一代过去,一代又来,地却永远长存。日头出来,日头落下,急归所出之地。
风往南刮,又往北转,不住的旋落,而且返回转行原道,江河都往海里转,海
却不满,江河从何处流,仍归何处。
希偌
2003-05-14
打赏
举报
回复
这个方法没你的好,Good
希偌
2003-05-14
打赏
举报
回复
s.executeQuery("INSERT INTO test (name) values ('3')");
ResultSet rs=s.getGeneratedKeys();
rs.next();
System.out.println(rs.getInt("GENERATED_KEY"));
gucs
2003-05-14
打赏
举报
回复
我刚修改后的添加方法,很方便!
public int AddNew() {
String strSql;
int intRtn = -1;
strTemplateVar = "TemplateVar:" + getRandom() + getRandom() + getRandom();
strSql = "INSERT INTO blocks (name, template_var, type) VALUES (?, ?, ?)";
strSql += " SELECT @@IDENTITY AS 'new_id'";
try {
m_PrepStatement = m_Connection.prepareStatement (strSql);
m_PrepStatement.setString (1, strName);
m_PrepStatement.setString (2, strTemplateVar);
m_PrepStatement.setString (3, strType);
m_ResultSet = m_PrepStatement.executeQuery ();
m_ResultSet.next ();
intRtn = m_ResultSet.getInt ("new_id");
}
catch (Exception e) {
e.printStackTrace ();
} // try ... catch
return intRtn;
}
gucs
2003-05-14
打赏
举报
回复
我刚才能过sql事件查看器,看到了在ado中使用@@IDENTITY,sql联机帮助中也看到了你提到的函数,谢谢!
@@IDENTITY
返回最后插入的标识值。
语法
@@IDENTITY
返回类型
numeric
注释
在一条 INSERT、SELECT INTO 或大容量复制语句完成后,@@IDENTITY 中包含此语句产生的最后的标识值。若此语句没有影响任何有标识列的表,则 @@IDENTITY 返回 NULL。若插入了多个行,则会产生多个标识值,@@IDENTITY 返回最后产生的标识值。如果此语句激发一个或多个执行产生标识值的插入操作的触发器,则语句执行后立即调用 @@IDENTITY 将返回由触发器产生的最后的标识值。若 INSERT 或 SELECT INTO 语句失败或大容量复制失败,或事务被回滚,则 @@IDENTITY 值不会还原为以前的设置。
在返回插入到表的 @@IDENTITY 列的最后一个值方面,@@IDENTITY、SCOPE_IDENTITY 和 IDENT_CURRENT 函数类似。
@@IDENTITY 和 SCOPE_IDENTITY 将返回在当前会话的所有表中生成的最后一个标识值。但是,SCOPE_IDENTITY 只在当前作用域内返回值,而 @@IDENTITY 不限于特定的作用域。
IDENT_CURRENT 不受作用域和会话的限制,而受限于指定的表。IDENT_CURRENT 返回任何会话和任何作用域中为特定表生成的标识值。有关更多信息,请参见 IDENT_CURRENT。
示例
下面的示例向带有标识列的表中插入一行,并用 @@IDENTITY 显示在新行中使用的标识值。
INSERT INTO jobs (job_desc,min_lvl,max_lvl)
VALUES ('Accountant',12,125)
SELECT @@IDENTITY AS 'Identity'
zez
2003-05-14
打赏
举报
回复
insert和select合成一个sql语句,如下:
INSERT INTO table(xxx,xxx...) VALUES(?,? ...) SELECT SCOPE_IDENTITY() AS 'obj_id'";
ResultSet rs = pstmt.executeQuery();
rs.next();
int id = rs.getInt("obj_id");
这个方法在sql server2k下实现,其它数据库没有试过.
gucs
2003-05-14
打赏
举报
回复
在看jdbc api时,我已经知道了这个方法。
===================================
我的想法是:在不使用两个sql查询时,能否得到刚添加记录的identity列的值。
这是我的bean中的一个添加方法,我想他的返回值是刚添加记录的identity列的值。
public int AddNew() {
String strSql;
int intRtn = -1;
strSql = "SELECT * FROM blocks";
strTemplateVar = "TemplateVar:" + getRandom();
try {
executeQuery (strSql);
m_ResultSet.moveToInsertRow ();
m_ResultSet.updateString ("name", strName);
m_ResultSet.updateString ("template_var", strTemplateVar);
m_ResultSet.updateString ("type", strType);
m_ResultSet.insertRow ();
}
catch (SQLException e) {
e.printStackTrace();
} // try ... catch
return intRtn;
}
gucs
2003-05-14
打赏
举报
回复
有什么解决方法?
急需!
=================
一代过去,一代又来,地却永远长存。日头出来,日头落下,急归所出之地。
风往南刮,又往北转,不住的旋落,而且返回转行原道,江河都往海里转,海
却不满,江河从何处流,仍归何处。
希偌
2003-05-14
打赏
举报
回复
在JDBC里等同于addnew的方法如下:
…………//在之前打开的Statement要使用能头更新的参数
ResultSet rs=conn.executeQuery("select * from tablename");
rs.moveToInsertRow();
rs.updateString("fieldname","hello");
rs.insertRow();
rs.close();
rs=null;
3天掌握SQL Server 2012 数据库
SQL Server是由Microsoft开发和推广的关系数据库管理系统(DBMS),Microsoft SQL Server 2012 是一个全面的数据库平台,
使用
集成的商业智能 (BI)工具提供了企业级的数据管理。Microsoft SQL Server 数据库引擎为关系型数据和结构化数据提供了更安全可靠的存储功能,使您可以构建和管理用于业务的高可用和高性能的数据应用程序 。 黄强老师针比较稳定且较新的SQL SERVER 2012版本演示数据库的安装
使用
,SQL(Structured Query Language)语言、T-SQL语言,数据库的增删改查、函数、存储过程、事务等重要知识点,让学员轻松入门并快速掌握关系型数据库!
com.microsoft.
sqlserver
.
jdbc
.
SQLServer
Exception: 仅当
使用
了
列
列
表并且
ID
ENTITY
_INSERT 为 ON 时,才能为表's_student'
中
的
com.microsoft.
sqlserver
.
jdbc
.
SQLServer
Exception: 仅当
使用
了
列
列
表并且
ID
ENTITY
_INSERT 为 ON 时,才能为表's_student'
中
的标识
列
指定显式值。 当mysql数据库转换为
sqlserver
数据库时,如果第一个
id
设置为自动递增,那么 String sql = "insert into s_class values(...
nested exception is com.microsoft.
sqlserver
.
jdbc
.
SQLServer
Exception
今天在写一个数据库语句的时候,出现了一个错误,话不多说,上图 nested exception is com.microsoft.
sqlserver
.
jdbc
.
SQLServer
Exception: 仅当
使用
了
列
列
表并且
ID
ENTITY
_INSERT 为 ON 时,才能为表'Categories'
中
的标识
列
指定显式值。 出错原因可能就是:数据库表的
id
设置为 自增长,那么,写sql语句的时候,就不能写成 String sql =insert into category values(null..
mybatis plus 报错com.microsoft.
sqlserver
.
jdbc
.
SQLServer
Exception: 必须执行该语句才能获得结果
原因: 这是因为是主键
ID
回填,但是要求该数据库提供的
JDBC
驱动可以支持返回批量插入的主键值(
JDBC
提供了接口,但并不是所有数据库都完美实现了该接口)因此到目前为止,可以完美支持该功能的仅有MySQL数据库。由于SQL Server数据库官方提供的
JDBC
只能返回
最后
一个插入数据的主键值,所以不能支持该功能。 解决方法: 针对 SQL Server数据库出现的这个报错信息,我将批量更新的那个方法进行了try catch 处理此异常,让程序继续执行下去,不进行回滚操作,比较实际的插入语句已经是执
om.microsoft.
sqlserver
.
jdbc
.
SQLServer
Exception: 仅当
使用
了
列
列
表并且
ID
ENTITY
_INSERT 为 ON 时,才能为表
当
sqlserver
表的主键是自增的时候,主动传入
id
值进行insert会报错。去掉
id
值即可。
Web 开发
81,092
社区成员
341,716
社区内容
发帖
与我相关
我的任务
Web 开发
Java Web 开发
复制链接
扫一扫
分享
社区描述
Java Web 开发
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章