java mongodb id自增新增之后返回新增列的值 我需要返回自增的id

当前位置: →
→ 取得插入当前行数据的自动增长字段的值
取得插入当前行数据的自动增长字段的值
& 作者:佚名 & 来源: 互联网 & 热度:
&收藏到→_→:
摘要: 获得插入当前行数据的自动增长字段的值pstmt=conn.prepareStatement(sql,Statement.RETURN_GENERATED_KEYS); 然后处理完了Resu...
"取得插入当前行数据的自动增长字段的值"::
获得插入当前行数据的自动增长字段的值pstmt=conn.preparestatement(sql,statement.return_generated_keys);
然后处理完了resultset&rskey=pstmt.getgeneratedkeys();&//1
&&&rskey.next();&&&&&&&&&&&&&//2
&&&int&orderid&=&rskey.getint(1);//3
debug结果是前面全没问题包括1,2两步都对的,并且rskey.next()为true。在执行第3步后跳到异常,提示
:&无效的列类型:&getint&not&implemented&for&class&oracle.jdbc.driver.t4crowidaccessor
at&oracle.jdbc.driver.databaseerror.throwsqlexception(databaseerror.java:111)
&at&oracle.jdbc.driver.databaseerror.throwsqlexception(databaseerror.java:145)
&at&oracle.jdbc.driver.accessor.unimpl(accessor.java:357)
&at&oracle.jdbc.driver.accessor.getint(accessor.java:467)
&at&oracle.jdbc.driver.oraclereturnresultset.getint(oraclereturnresultset.java:265)
很郁闷,弄了一整天了。不知道怎么回事。望高手解答,万谢啊
我补充一下,我的主键是seq_id.nextval这样插入的,
------解决方案--------------------先把seq_id.nextval这个值取出来,或者直接写到你的sql里面去------解决方案--------------------以前用过一次oracle的,它没有自增的,要通过序列来的,有点麻烦,我回去帮你找个例子看看------解决方案--------------------给你写了个例子。。。
--1.部门表(t_part)
create&table&t_part
&&&&&&&p_id&&number(8)&primary&key,&&&--部门编号(自增列)
&&&&&&&p_name varchar2(20),
&&&&&&&&--部门名称
&&&&&&&p_remark varchar2(1000)
&&&&--部门介绍&&&&&&&
--创建seq_partid序列
create&sequence&seq_partid
start&with&1
--实现p_id&的自动增长
create&or&replace&trigger&tri_partid
before&insert&on&t_part
for&each&row
&&&&select&seq_partid.nextval&into&:new.p_id&from&
--插入数据
insert&into&t_part&values(7,'销售一部','销售好销售妙');
insert&into&t_part&values(0,'销售二部','销售好销售妙');
添加的时候id就无所谓怎么填了 搜索此文相关文章:此文来自: 马开东博客
网址: 站长QQ
上一篇:没有了
取得插入当前行数据的自动增长字段的值_JavaWeb相关文章
JavaWeb_总排行榜
JavaWeb_最新
JavaWeb_月排行榜
JavaWeb_周排行榜
JavaWeb_日排行榜17424人阅读
J2SE(113)
/2010/07/java-to-insert-in-the-main-table-record-id-from-the-table-for-the-main-table-as-a-foreign-key.html#comment-2264
在MySQL中,使用auto_increment类型的id字段作为表的主键,并用它作为其他表的外键,形成“主从表结构”,这是数据库设计中常见的用法。但是在具体生成id的时候,我们的操作顺序一般是:先在主表中插入记录,然后获得自动生成的id,以它为基础插入从表的记录。
这里面有个困难,就是插入主表记录后,如何获得它对应的id。通常的做法,是通过“select max(id) from tablename”的做法,但是显然这种做法需要考虑并发的情况,需要在事务中对主表加以“X锁“,待获得max(id)的值以后,再解锁。这种做法需要的步骤比较多,有些麻烦,而且并发性也不好。有没有更简单的做法呢?
答案之一是通过select LAST_INSERT_ID()这个操作。乍一看,它和select max(id)很象,但实际上它是线程安全的。也就是说它是具体于数据库连接的。下面通过实验说明:
1、在连接1中向A表插入一条记录,A表包含一个auto_increment类型的字段。
2、在连接2中向A表再插入一条记录。
3、结果:在连接1中执行select LAST_INSERT_ID()得到的结果和连接2中执行select LAST_INSERT_ID()的结果是不同的;而在两个连接中执行select max(id)的结果是相同的。
其实在MSSQL中SCOPE_IDENTITY()和IDENT_CURRENT()的区别和这里是类似的。使用SCOPE_IDENTITY()可以获得插入某个IDENTITY字段的当前会话的值,而使用IDENT_CURRENT()会获得在某个IDENTITY字段上插入的最大值,而不区分不同的会话。
注:使用select last_insert_id()时要注意,当一次插入多条记录时,只是获得第一次插入的id值,务必注意!
当然,我们还可以使用另一种更加便捷的方法:在JDBC追加记录后,使用API获得新追加记录的主键值。
这个实现使用了Statement的getGeneratedKeys方法,
当Statement追加了一条记录后,可以直接调用getGeneratedKeys方法获得新追加记录的key。
测试程序如下:
import java.sql.C
import java.sql.DriverM
import java.sql.ResultS
import java.sql.S
public class GetGenerateKey {
public static void main(String[] args) throws Exception {
public static void create()throws Exception {
System.setProperty(&jdbc.drivers&, &com.mysql.jdbc.Driver&);
Connection conn = DriverManager.getConnection(&jdbc:mysql://localhost:3306/jdbc&, &root&, &&);
Statement st = conn.createStatement();
String sql = &insert into user (name, birthday, money) values ('beck', '', 60)&;
st.executeUpdate(sql, Statement.RETURN_GENERATED_KEYS);
ResultSet rs = st.getGeneratedKeys();
if (rs.next()) {
int id = rs.getInt(1);
System.out.println (&生成记录的key为 :& + id);
st.close();
conn.close();
程序运行结果:
生成记录的key为 :9
数据库的记录为:
+----+----------+------------+-------+
id | name&&&& | birthday&& | money |
+----+----------+------------+-------+
9& | beck&&&& |
+----+----------+------------+-------+
总结:这个API方法提供的好处就是不用重新再执行一次查询获得新记录的key值。减少了工作量和服务器的负担。
注意点,在执行executeUpdate方法的时候,要指定返回生成key的选项。
===========================================================
2种方法的java 代码
// 用这种方法能得到插入自增的id 很好用
PreparedStatement pstmt = conn.prepareStatement(sql.toString(),PreparedStatement.RETURN_GENERATED_KEYS);
for (int i = 0; i & pars. i++) {
pstmt.setObject(i+1, pars[i]);
pstmt.executeUpdate();
long autoIncKeyFromApi = -1;
ResultSet rs = pstmt.getGeneratedKeys();
if (rs.next()) {
autoIncKeyFromApi = rs.getInt(1);
return autoIncKeyFromA
qRunner.update(conn,sql.toString(),pars);
Long zsysqID = (Long) qRunner.query(conn, &SELECT LAST_INSERT_ID()&, new ScalarHandler(1));
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:3957713次
积分:36900
积分:36900
排名:第121名
原创:665篇
转载:89篇
评论:1258条
阅读:73233
(1)(2)(1)(9)(2)(12)(18)(19)(13)(28)(29)(28)(31)(29)(2)(1)(2)(1)(2)(9)(5)(31)(30)(31)(31)(33)(26)(22)(1)(1)(3)(2)(1)(2)(1)(6)(30)(11)(3)(3)(11)(7)(11)(14)(1)(16)(43)(15)(71)(54)
(window.slotbydup = window.slotbydup || []).push({
id: '4740887',
container: s,
size: '250,250',
display: 'inlay-fix'Integer enterInfoId&=
insert into Tbl_Xz_PersonalInformation(name,locationArea,phone,flag) values('&+user.getRealname()+&',&+user.getRegiontype()+&,'&+user.getPhone()+&',&+0+&)&;
PreparedStatement pstmt = conn.prepareStatement(sql,Statement.RETURN_GENERATED_KEYS);//获取自动增加的id号
pstmt.executeUpdate();
ResultSet&rs = pstmt.getGeneratedKeys();
if(rs.next)
&enterInfoId&= rs.getInt(1);
本文已收录于以下专栏:
相关文章推荐
我的方法 protected int insertGetid(String sql, Object...val) throws Exception{
conn = C3...
表结构:create table test(
id varchar2(32) primary key,
name varchar2(32)
);import java.sql.Conn...
本文转自:http://blog.csdn.net/wwg2436/article/details/7638309
未作修改。
当插入一条记录时,我们很多时候都想马当前插入的主键返回出来.
insert into xxx values(?,?,?)
这是我们之前
public void insert(){
int autoIncKeyFromApi = -1; //第一步:定义autoIncKeyFromApi用于接收ID的数值;
autoIncKey...
JDBC插入返回自动增长列的值,很多时候我们要先执行一条insert语句,在执行一条查询语句,这样可能会出现多线程的情况,可能会查询错ID,如果使用这种在插入后立即返回当前自增长的的值就永远不会错乱I...
这篇文章介绍了Java获取最后插入MySQL记录的自增ID值的3种方法,有需要的朋友可以参考需要
复制代码 代码如下:
String sql = &IN...
通常插入数据时的代码如下:
String sql = &insert into table (name) values(?)&;
PreparedStatement pstmt = con...
在一对多的关联操作中,通常在一方插入记录后,需要获取到当前记录的id,以方便进行多方的插入操作。要解决这一问题,在JDBC中至少有三种不同的实现方法:
1.在插入语句后添加一条查询,利用result...
常常在使用Hibernate、iBatis时候,当插入一条数据的时候,实体Bean的原空主键就 赋上新值了,但是用原生sql怎么解决呢,或者说框架实现这个的原理呢
参见测试类,执行以...
他的最新文章
讲师:王哲涵
讲师:韦玮
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)安全检查中...
请打开浏览器的javascript,然后刷新浏览器
< 浏览器安全检查中...
还剩 5 秒&}

我要回帖

更多关于 java mongodb id自增 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信