jdbc取得插入记录的主键值

网上有很多关于这方面的文章,但是我按照这种做法却得到的是rowid,按照下面这篇文章解决了问题,转之,希望有用。。。。。。。。。。

对于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,而且驱动程序的体积更小。
TMS_WebGMaps_1.9.8.0_Full_Source TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder 立即下载

相关推荐

LabVIEW实战:基于DAQmx的实时正弦波生成、采集与波形图动态显示

本文详细介绍了如何使用LabVIEW和DAQmx驱动实现实时正弦波的生成、采集与动态显示。通过USB-6008数据采集卡,结合队列缓冲机制和动态波形图显示技术,构建了一个完整的信号处理系统。文章包含硬件连接、软件配置、任务设置及常见问题排查,适合LabVIEW初学者和硬件控制开发者参考。

weixin_30872337的博客 124

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

LSM6DS3TR-C IMU传感器入门:从MEMS原理到姿态解算实战

惯性测量单元(IMU)是现代智能设备实现运动感知的核心部件,其基础原理基于微机电系统(MEMS)技术。MEMS加速度计通过检测质量块在惯性力作用下的位移来测量线性加速度,而陀螺仪则利用科里奥利力效应感知角速度。这种技术使得微型化、低成本的6自由度运动测量成为可能,为机器人、无人机、可穿戴设备等提供了关键的空间姿态和运动状态信息。在实际工程中,开发者需要掌握I2C/SPI通信协议、传感器数据读取与校准,并通过互补滤波等算法融合加速度计和陀螺仪数据,实现稳定的姿态解算。LSM6DS3TR-C作为一款高性价比的6

weixin_28684655的博客 596

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

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

weixin_29352517的博客 428

数据清洗(Data Cleansing)

数据清洗(Data Cleansing)是指对数据进行处理和纠错,以去除或修复数据集中存在的错误、不致、不完整和冗余的数据,从而使数据更加准确、可靠和有用。数据清洗是数据处理和数据分析中一个非常重要的步骤,它可以帮助我们提高数据的质量,从而提高数据分析和机器学习的准确性和可靠性。数据清洗是一个重要的过程,它可以帮助我们提高数据的质量,从而提高数据分析和机器学习的准确性和可靠性。在实际应用中,我们可以使用一些工具和技术来实现数据清洗,例如 Pandas、NumPy 和 OpenRefine 等。通过数据清洗,

meimei169500的博客 1万+

树莓派通过TTL3.3转485 Modbus采集水表

所需道具 树莓派0,我用的是树莓派zero wh; 具有光电直读功能的有线水表,我用的是咸鱼淘的埃美柯LXSY-20E1; TTL3.3 转 485模块,带隔离的贵些; 5V转12V升压模块。 原理 树莓派有UART(GPIO14 Tx 和 GPIO15 Rx)串口通讯功能,电器特性是3.3V TTL,直读远传水表支持M-Bus/485通讯接口,我买的光电直读水表485要求12V供电(根据仪表厂家说明书)。TTL和485虽然都是串口通讯,但电器特性不一样,不能直接接!我已经烧掉一个树莓派...

xhydongda的博客 3443

JDBC中获取主键自增值

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

tiantiantbtb的博客 736

spark 适配达梦数据库

spark 适配达梦数据库 版本 spark3.0.0 scala2.12.10 DM Database Server 64 V8 步骤一: 引驱动包: SBT方式: "com.dameng" % "Dm8JdbcDriver18" % "8.1.0.157", maven方式: <dependency> <groupId>com.dameng</groupId> <artifactId>Dm8JdbcDriver18</artifac

_@Eva@_的博客 2090

RdbmsOperation

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

muyi8805的专栏 690

10、网络安全工具:Bettercap 与 Web 应用测试工具全解析

本文详细解析了网络安全工具Bettercap及其在中间人攻击和无线攻击中的应用,同时介绍了多种Web应用测试工具,如Amass、Cadaver、Dirb等,并探讨了工具的使用场景、流程、注意事项以及未来发展趋势,为网络安全测试提供了全面的指导。

u0v1w2x3的博客 227

UNet改进(19):基于残差注意力模块Residual Attention的高效分割网络设计

本文提出一种结合注意力机制的改进UNet网络,通过引入残差注意力模块(ResidualAttentionBlock)增强医学图像分割性能。该网络在传统UNet的U型结构基础上,创新性地将轻量级注意力机制与残差连接相结合,在编码器-解码器各层级实现特征重标定。改进后的网络具有三方面优势:通过注意力机制自适应聚焦关键特征区域,利用残差连接缓解梯度消失问题,采用模块化设计灵活配置注意力位置。

2501_91516851的博客 780

JDBC获取插入记录的主键值

实现方案: /** * 实现: JDBC 返回插入记录的主键值 * 实现要求:前提是表的主键必须是自增长的 * @param clazz * @param sql: INSERT INTO userinfos(userName,password,date,address) VALUES(?,?,?,?); * @param args * @return */ publ...

区块链之美 738

【HAL库】STM32CubeMX开发----STM32F407----SPI实验

【HAL库】STM32CubeMX开发----STM32F407----SPI实验

MQ0522的博客 3019

JDBC_获取插入记录的主键值

取得数据库自动生成的主键 Connection conn = JdbcUtil.getConnection(); String sql = "insert into user(name,password,email,birthday) values('abc','123','abc@sina.com','1978-08-08')"; PreparedStatement st = conn. prepareStatement(sql,Statement.RETURN_GENERATED_KEY

Bertrand 518

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

MYSQL 之 JDBC(十一): JDBC获取插入记录的主键值

取得数据库自动生成的主键值 package com.litian.jdbc; import javax.swing.plaf.nimbus.State; import java.sql.*; /** * @author: Li Tian * @contact: litian_cup@163.com * @software: IntelliJ IDEA * @file: JDBCTest3.java * @time: 2020/3/29 15:27 * @desc: |取得数据库自

创业项目 542

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

JDBC_获取插入记录的主键值(基于MySQL数据库)

代码如下:package com.atchance.jdbc; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; public class testGetKe

chance2015的博客 2038

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

使用JDBC获取插入记录的自增主键值

对于如下的表结构:mysql> describe persons; +-------+--------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +-------+--------------+------+-----+

晚晴小筑 2841

jdbc 获取mysql主键_MYSQL 之 JDBC(十一): JDBC获取插入记录的主键值

取得数据库自动生成的主键值package com.litian.jdbc;import javax.swing.plaf.nimbus.State;import java.sql.*;/*** @author: Li Tian* @contact: litian_cup@163.com* @software: IntelliJ IDEA* @file: JDBCTest3.java* @time:...

weixin_32154109的博客 237

JDBC对数据进行插入,更新或者是删除之后得到修改或者插入的那条记录的主键值

JDBC对数据进行插入,更新或者是删除之后得到修改或者插入的那条记录的主键值

u013803262的专栏 2693

JDBC:元数据 && 获取插入记录的主键值 && _JDBC_处理 Blob

一、元数据 DatabaseMetaData类 DatabaseMetaData 类中提供了许多方法用于获得数据源的各种信息,通过这些方法可以非常详细的了解数据库的信息: getURL():返回一个String类对象,代表数据库的URL。 getUserName():返回连接当前数据库管理系统的用户名。 isReadOnly():返回一个boolean值,指示数据库是否只允许读操作。

NotPerfect-EOF 1479

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

当插入一条记录时,我们很多时候都想马当前插入的主键返回出来. 别外.如果主键是自动生成的(大多数时候是这样),那么取回主键是一种比较困难的事. 可能对于一些特殊的数据库必须把insert into和select max(key)或什么序列当前值作为一个事务的原子来操作,但很多数据库(以及数据库操作环境)并不能为你提供事务并发控制.所以如果多人同时操作,那么select max(key)很可能就

4769

Mybatis中添加记录成功以后,返回主键id值

使用MyBatis往MySQL数据库中插入一条记录后,需要返回该条记录的自增主键值。 方法:在mapper中指定设置useGeneratedKeys=“true”,keyProperty属性为主键属性 &lt;insert id="insertAndGetId" useGeneratedKeys="true" keyProperty="userId" parameterType="com.chen...

我不是知识的搬运工 2826

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

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

天下无双 1700

获取生成的键值--JDBC获取和Mybtis获取

这个错误是由于在执行SQL插入操作时,没有指定需要返回生成的键值。在Java中,如果需要获取插入操作后自动生成的主键值,需要在执行或方法时,通过参数来指定。

m0_62961212的博客 411

JDBC--(9)获取自动生成的主键

JDBC 获取自动生成的主键 在我们设置设计表时,会设置主键,自动增长的主键 有时候我们插入数据时,要想知道我们生成的主键是多少 需求场景 用户注册时,添加用户名,密码后,插入到数据库当中 跳转成完善个人信息页 1. 完善信息更新到刚插入的那个记录当中,所以要获取刚插入的那个主键是多少 2. 不能使用用户名来做条件,用户名有重名情况 3. 所以插入完后,就应该获取刚插入的那个主键 示例图 传...

Mikowoo007的博客 513
上一篇: (转自tech.qq.com)阿里巴巴未来十年重点投资的三个领域
下一篇: EhCache 分布式缓存对象的同步
helloman0908
博客等级 码龄16年 1粉丝 22原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值