ORACLE JDBC的getGeneratedKeys(转载)

ORACLE JDBC的getGeneratedKeys
对于JDBC 3.0, 使用statement.getGeneratedKeys()可以返回刚刚插入的记录的自动增长的ID值。对于ORACLE,一般是定义一个序列,然后利用序列的nextval来自动给列分配ID值。但是很多人发现,在利用ORACLE JDBC驱动编写的时候,往往会失败。显示“java.sql.SQLException: Unsupported feature”。

其实,对于ORACLE JDBC,只有在10.2.0.1.0版本后的JDBC才支持getGeneratedKeys特性。而且如果使用下列代码:

String sql = "INSERT INTO FOO (NAME) VALUES ('BAR')";
Statement stmt = connection.createStatement();
stmt.executeUpdate(sql, Statement.RETURN_GENERATED_KEYS);
ResultSet rs = stmt.getGeneratedKeys();
oracle.sql.ROWID rid = (oracle.sql.ROWID) rs.getObject(1); //getLong and getInt fail

// The following fail
// long l = rid.longValue();
// int i = rid.intValue();

String s = rid.stringValue(); // s equals "AAAXcTAAEAAADXYAAB"

返回的将是ROWID值。可以使用下列代码:

String sql = "INSERT INTO ORDERS (ORDER_ID, CUSTOMER_ID) VALUES (ORDER_ID_SEQ.NEXTVAL, ?)";
String generatedColumns[] = {"ORDER_ID"};
PreparedStatement pstmt = conn.prepareStatement(sql, generatedColumns);
pstmt.setLong(1, customerId);
pstmt.executeUpdate();
ResultSet rs = pstmt.getGeneratedKeys();
rs.next();
// The generated order id
long orderId = rs.getLong(1);

能得到正确的ID值。注意,其中generatedColumns[]表示从哪个列来获取新的ID值。我们也可以使用:

int a[]={1};

PreparedStatement pstmt = conn.prepareStatement(sql, a);

......

来表示第1列是KEY列,我们要获取第1列的新插入的值。

目前(20071219)ORACLE JDBC最新的是11g1,推荐使用。http://www.oracle.com/technology/software/tech/java/sqlj_jdbc/htdocs/jdbc_11...

另外,Jdeveloper 10.1.3.3里面携带的JDBC驱动也不支持getGeneratedKeys。需要进行更新。

当然,也可以使用第三方的JDBC驱动,如i-net software的Oranxo驱动,支持getGeneratedKeys,而且驱动程序的体积更小。
FortiWeb 相对路径遍历漏洞复现(CVE-2025-64446) FortiWeb是Fortinet公司推出的企业级Web应用防火墙(WAF),专为保护Web应用和API抵御高级威胁设计。它集成人工智能与机器学习技术,通过双层检测引擎(HMM模型与SVM向量机)精准识别异常流量,可防御OWASP Top 10攻击、SQL 注入、XSS、DDoS及恶意机器人。其核心功能包括API自动化保护、虚拟补丁集成(兼容Acunetix等第三方扫描工具)及智能流量分析,支持HTTP/2、WebSocket等现代协议。(CVE-2025-64446) 阅读详情

相关推荐

基于Python的微信聊天记录分析——数据获取

本篇为“基于Python的微信聊天记录分析”第一篇,主要涉及数据获取,包括Python环境配置、WeChatMsg项目配置和运行、获取聊天记录等内容,流程简单、比较基础,后续这个系列会涉及基于Python的数据处理、统计分析、NLP技术等内容。希望和大家多多交流,共同进步!

Henryli1202的博客 1万+

jdbc取得插入记录的主键值

网上有很多关于这方面的文章,但是我按照这种做法却得到的是rowid,按照下面这篇文章解决了问题,转之,希望有用。。。。。。。。。。 对于JDBC 3.0, 使用statement.getGeneratedKeys()可以返回刚刚插入的记录的自动增长的ID值。对于ORACLE,一般是定义一个序列,然后利用序列的nextval来自动给列分配ID值。但是很多人发现,在利用ORACLE JD...

helloman0908的博客 342

深入浅出SSD:固态存储核心技术、原理与实战(文末赠书)

作为经典畅销书的升级版,本书在第1版的基础上新增了大量新知识(如闪存、UFS、测试、文件系统等),并改写或删减了许多过时或不适用的内容,总修改量超过60%。本书由SSD技术社区SSDFans的核心团队成员联合业界、高校SSD方面的专家共同完成,相对于第1版,内容更全面、更新,也更有深度。本书从产品、技术和应用3个维度展开,全面、详细讲解了SSD的发展历史、产品形态、工作原理、整体架构,以及各个功能模块的原理和使用,从SSD的前端接口协议到FTL算法,再到后端的闪存和纠错,以及测试,本书都有涉及。

阿玥的小博客 3124

jdbc getgeneratedkeys mysql_mysql基本的JDBC概念

26.3.1.4. 检索AUTO_INCREMENT列的值在JDBC API 3.0版之前,没有从支持“自动增量”或ID列的数据库中检索关键值的标准方法。对于针对MySQL的早期JDBC驱动,总是不得不在语句接口上使用特定的MySQL方法,或在向拥有AUTO_INCREMENT关键字的表发出“INSERT后”发出“SELECT LAST_INSERT_ID()”。特殊的MySQL方法调用是不可移植...

weixin_36177953的博客 428

STM32F030C8烧录实战:用J-Link Commander实现一键批量烧写(附完整脚本)

本文详细介绍了如何使用J-Link Commander工具链实现STM32F030C8的一键批量烧录,包括环境配置、批处理脚本设计、命令脚本解析以及生产环境实战技巧。通过自动化烧录流程,显著提升效率并降低人为错误,特别适合量产和频繁迭代的开发场景。

weixin_30505225的博客 461

拯救我的老平板三星note8.0 table(GT-N5110)升级到lineage os-14.1(android7.1)全记录

买了多年的三星平板note8.0已经闲置了一段时间,今天在家不能出门,也没啥事,就把它拿出来刷新系统。不成想居然搞了一天,还差点变成了砖。 原版的系统是安卓4.0的系统,很多软件已经不能用了,微信、优酷都不支持,而且三星也不提供更新升级,于是寻求第三方解决方案。折腾过程一波三折,就不赘述了,我就讲一下正确的操作过程吧。 切记我这里讲的过程只针对三星note8.0 table,国行版本,版本号是...

weixin_41108814的博客 2万+

mysql getgeneratedkeys,JDBC获得数据库生成的主键(JDBC、Primary Key)

JDBC获得数据库生成的主键 佟强 http://blog.youkuaiyun.com/microtong 在实际开发中,数据库中表的主键经常会由数据库负责生成,INSERT语句插入数据时插入除了主键以外的字段。很多情况下,当INSERT语句提交给数据库引擎执行完成后,程序需要获得生成的主键以便根JDBC获得数据库生成的主键 佟强http://blog.youkuaiyun.com/microtong在实际开发中,数据...

weixin_29352517的博客 428

手把手教你用DLP4500和海康相机搭建双目结构光系统(附完整代码获取路径)

本文详细介绍了如何利用DLP4500投影仪和海康工业相机搭建低成本双目结构光三维测量系统。从硬件选型、软件配置到结构光编码解码实现,再到三维重建全流程,提供了完整的实战指南和优化技巧,帮助用户以不到2万元的预算实现0.05mm精度的三维扫描。

weixin_32447969的博客 317

JDBC中获取主键自增值

数据库主键自增情况下,JDBC返回自增主键。PrepareStatement演示。Statement演示。

tiantiantbtb的博客 736

STMCubeMX使用TB6612驱动编码轮并进行测速

TB6612电机驱动模块通过IN1和IN2引脚控制电机的旋转方向,并通过PWM信号的占空比调节电机速度。代码示例展示了如何使用GPIO控制电机的正反转,以及如何动态调整PWM占空比实现速度控制。系统设计中,TB6612与编码减速电机连接,STM32CubeMX用于初始化GPIO和PWM输出。编码器接口配置使用TIM3进行测速,TIM4定时器用于速度计算。Keil软件中编写的代码包括编码轮计数值获取、速度计算、电机正反转控制以及小车运动控制等功能。通过OLED显示速度,并实现电机的调试与测试。

wwivn的博客 2262

从零开始做对容量规划:一文讲透 SAP Greenfield sizing 与 Quick Sizer 落地方法

摘要 SAP项目早期硬件规划面临业务细节缺失的挑战,Greenfield sizing方法通过Quick Sizer工具将业务需求转化为硬件资源需求。该方法聚焦主要负载驱动因素而非精确预测,采用标准化问卷形式输入并发用户数、业务处理量等参数,输出内存、CPU等资源需求。关键步骤包括选择正确的Quick Sizer版本、创建sizing项目、参考SAP基准测试和认证目录校准结果,最终将需求交由硬件厂商落地。该方法特别适用于缺乏历史数据的新系统部署,帮助在不确定性中建立可控的容量规划模型,避免资源浪费或性能不足

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 216

如何得到JDBC Insert 语句执行后插入Oracle 数据库记录的主键

在应用中,很多时候会对表的主键用一个自动增涨的数来付值,如Oracle的sequence,插入后又想得到的主键的值。下面介绍一下相关的方法。1,用Oracle 的returning 语句。PreparedStatement  sta = conn.prepareStatement("INSERT INTO LOGGING VALUES (TESTSEQ.NEXTVAL,SYSDATE)re

天下无双 1700

SAP CBC 集成质量系统初始化接入实战指南

摘要 本文探讨了SAP S/4HANA Cloud Public Edition项目中质量系统的初始接入过程。质量系统并非开箱即用,而是需要经过SAP Central Business Configuration(CBC)的Scope and Organizational Structure阶段部署后才能具备完整功能。文章重点分析了几个关键环节:CBC里程碑确认的时机选择、Identity Authentication的初始管理员设置、Business Role Template的创建规范等。实施过程中需特

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1408

转载—jdbc插入主从表时,如何取回主表id。以及对oracle的改进

用jdbc给数据库插入数据,主从表插入的过程中,需要先取出主表id。  conn = DriverManager.getConnection(PL.DATABASE_URL ,                         PL.DATABASE_UID,PL.DATABASE_PWD );                 pstmt = conn.prepareStatement(PL.

leonardo_7的专栏 796

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

JDBC插入操作时,通过return返回主键

转载自:http://blog.youkuaiyun.com/kkdelta/article/details/4640029 在应用中,很多时候会对表的主键用一个自动增涨的数来付值,如Oracle的sequence,插入后又想得到的主键的值。下面介绍一下相关的方法。 1,用Oracle 的returning 语句。 PreparedStatement  sta = conn.prepareStateme

tongge01uuu的博客 1271

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

在MySQL或者SQLServer中,添加对象后自动返回主键到对象模型中的配置方式

设置是否使用JDBC的getGenereatedKeys方法获取主键并赋值到keyProperty设置的领域模型属性中。MySQL和SQLServer执行auto-generated key field,因此当数据库设置好自增长主键后,可通过JDBC的getGeneratedKeys方法获取。但像Oralce等不支持auto-generated key field的数据库就不能用这种方法获取主键了...

weixin_30725467的博客 122

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

Java入门到精通-36 数据库编程——JDBC、连接池与事务管理

JDBC数据库编程核心摘要 JDBC是Java连接数据库的标准API,主要包含以下核心内容: 架构组成: 应用程序通过JDBC API与各类数据库驱动交互 核心接口包括Connection、Statement、PreparedStatement和ResultSet 关键操作: 使用DriverManager获取数据库连接 推荐使用PreparedStatement防SQL注入 查询通过executeQuery()获取ResultSet结果集 增删改使用executeUpdate()返回影响行数 最佳实践:

weixin_56693899的博客 108

MyBatis读书笔记----使用JDBC方式返回主键自增的值的两种方式

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_34085658的博客 196

mybatis+mysql insert添加数据后返回数据主键id

方法1:根据useGeneratedKeys获取返回值,部分数据库不支持 修改mybatis xml <insert id="insertUser" useGeneratedKeys="true" keyProperty="id" parameterType="com.entity.user"> insert into test (name) values (#{n...

weixin_30302609的博客 147

mybatis获取自增主键

一、使用JDBC的方式返回主键自增的值 <insert id="insertSysUser" parameterType="SysUser" useGeneratedKeys="true" keyProperty="id" > insert into sys_user(user_name,password,user_info,head_img,create_ti...

weixin_30786657的博客 217

mysql联查时为空补全和jdbc获取最后插入生成的id

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_34034670的博客 126

Mybatis执行insert语句,获取主键

一般的insert操作返回的是受影响行数,如果要获得新增加的那一行的主键,有两种方式可以实现。 方法1(推荐): <insert id="addAuthor" parameterType="domain.Author" useGeneratedKeys="true" keyProperty="id"> insert into author(username,pass...

disuoxia5722的博客 214

RdbmsOperation

RdbmsOperation 是org.springframework.jdbc.object包对“关系型数据库”最基本的抽象,对关系型数据库基本的操作有什么?来看一下1.属性: 可执行的sql, 传入sql的参数类型, 结果集类型, compiled 是否编译的验证, 基类至少验证存在DataSource,sql语句存在,子类实现自己的验证规则。 2.

muyi8805的专栏 690

getString/getNString not implemented for class oracle.jdbc.driver.T4CBlobAcc

表里面应该是有一个blob的字段,实体类用string获取的,改成blob就行了

兔老大的胡萝卜 5192

返回数据库自动更新主键(getGeneratedKeys())

返回数据库自动更新主键 1.关联数据插入操作 开发中,某些业务需要在主表/从表关联关系下,插入数据时需要保证数据完整性。关联数据插入时的流程: 2.通过序列产生主键(Oracle) 数据库表的主键一般情况下与业务无关,而且通常采用自动生成的方式。Oracle数据库采用sequence的方式产生主键,在SQL语句中,指定由哪个序列为表产生主键;而其他的一些数据库(如SQLServer、MySQL)...

qq_42902470的博客 2680
上一篇: 正则表达式:/^([A-Za-z0-9]{8,20})$
下一篇: ant 打包 时出现java.lang.OutOfMemoryError: Java heap space
hz_java
博客等级 码龄17年 0粉丝 21原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值