`
java_see
  • 浏览: 35634 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

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,而且驱动程序的体积更小。
分享到:
评论

相关推荐

    JDBC 4 ORACLE

    【标题】"JDBC 4 ORACLE" 涉及的知识点主要集中在Java数据库连接(JDBC)技术以及Oracle数据库的使用。JDBC是Java语言中用来规范客户端程序如何访问数据库的应用程序接口,提供了诸如查询和更新数据库中数据的方法。...

    JDBC6和JDBC14

    3. **Statement的getGeneratedKeys()方法**:返回由INSERT、UPDATE或DELETE语句生成的自动增长键,这对于获取新插入行的主键非常有用。 4. **RowSet接口的增强**:JDBC6支持类型4的JavaBeans Compliant RowSets,...

    jdbc 插入记录并返回自增主键值

    在某些数据库中(如Oracle),可能需要使用其他方法来获取自增主键。 总的来说,Java中的JDBC提供了一种灵活且强大的方式来处理数据库操作,包括插入记录并获取自增主键。正确地使用预编译的`PreparedStatement`...

    JDBC驱动4.0

    - `getGeneratedKeys()`返回生成的主键值,适用于自增主键。 **PreparedStatement的增强** - 支持`?|?`占位符语法,用于有条件地插入或更新数据。 - `setRowId(int index, RowId value)`方法,处理行标识符。 **...

    java使用jdbc插入信息时获取id1

    5. **获取生成的键**:执行插入操作后,通过`preparedStatement.getGeneratedKeys()`获取生成的键。返回的是一个`ResultSet`,其中包含了新插入记录的主键信息。 6. **遍历结果集**:如果`ResultSet`有数据(即`...

    sql server jdbc 连接大部分jar

    5. **sqljdbc4.jar**: 针对SQL Server 2008引入,这个版本的驱动添加了对Java 6新特性(如Statement的getGeneratedKeys方法)的支持,以及一些性能和稳定性改进。 6. **sqljdbc41.jar**和**sqljdbc42.jar**: 分别...

    泛微Ecology E9适配人大金仓数据库说明_v3.docx

    1. 开发数据库连接配置:在开发环境中,需要更新E9代码,并将人大金仓jdbc驱动包(kingbase8-8.2.0.jar)加入项目依赖库。 2. 兼容问题及解决方法:人大金仓数据库90%以上语法兼容oracle,因此适配的时候数据库访问...

    JDBC的常用方法

    在Java编程中,JDBC(Java Database Connectivity)是用于与各种数据库进行交互的一套标准API。JDBC提供了多种方法来实现数据库操作,如查询、更新、删除数据等。本篇文章将详细探讨如何防止SQL注入、执行SQL批量...

    hibernate.properties

    #hibernate.connection.driver_class oracle.jdbc.driver.OracleDriver #hibernate.connection.username ora #hibernate.connection.password ora #hibernate.connection.url jdbc:oracle:thin:@localhost:1521:orcl...

    hibernate 详细配置

    在插入数据后,通过JDBC3的`PreparedStatement.getGeneratedKeys`获取自动生成的键值。 以上是Hibernate配置的一些关键属性,调整这些参数可以帮助优化数据库操作性能,提升应用程序的运行效率。在实际开发中,应...

    hibernate配置属性参数[定义].pdf

    7. `hibernate.jdbc.use_get_generated_keys`:在插入数据后,允许使用 JDBC 的 `getGeneratedKeys()` 方法获取自动生成的主键。 了解并正确配置这些属性对于实现高效、可靠的 Hibernate 应用至关重要。它们可以...

    hibernate 配置属性参数详情(全)

    7. **hibernate.jdbc.use_get_generated_keys**:在插入数据后,利用JDBC3的`getGeneratedKeys`方法获取自增列的值。 正确配置这些属性可以显著提升Hibernate应用的性能,减少资源消耗,并提供更好的调试和维护能力...

    hibernate参数配置

    19. **hibernate.jdbc.use_get_generated_keys**: 开启后,Hibernate会在插入数据后通过`PreparedStatement.getGeneratedKeys()`获取数据库自动生成的键值。 这些参数的正确配置对于优化Hibernate性能、减少资源...

    hibernate配置详解

    在插入数据后,通过JDBC3的PreparedStatement.getGeneratedKeys()获取自动生成的键。 了解并正确配置这些属性,能够帮助你优化Hibernate在实际项目中的性能和功能,使其更好地适应你的需求。记得根据你的具体...

    LibrarySystem图书管理系统(二)

    * 使用jdbc的getGeneratedKeys获取主键: * 使用别名替换列名,默认ture: * 开启驼峰命名转换: 三、Spring配置 Spring是一个轻量级的IoC容器,它可以将应用程序的各个组件组装起来。Spring配置文件spring-mvc....

    mysql取得自动增长的主键值

    - **功能介绍:** 在JDBC API中,`Statement`对象提供了`getGeneratedKeys()`方法,用于获取由上一次插入操作生成的自增ID。 - **注意事项:** 要使用此方法,需要在创建`Statement`时指定适当的类型和并发级别,...

    Jdbi3官方手册中文版

    Jdbi 支持灵活的插件体系,能够轻松集成各种库,如Guava、jodatime、Spring、Vavr,以及不同数据库供应商,如H2、Oracle、Postgres等。这使得开发者可以根据项目需求定制Jdbi的功能。 **核心特性**: - **参数绑定*...

    mysql的插入问题 怎么获得自动增长的ID

    ### MySQL的插入问题:如何获取自动增长的ID ...在使用Java程序通过JDBC接口插入记录时,推荐使用`PreparedStatement`的`getGeneratedKeys()`方法来获取自动生成的ID,以确保数据的完整性和安全性。

    hibernate[1].cfg.xml中配置信息详解

    **用途**:启用或禁用使用JDBC的`getGeneratedKeys()`方法来获取插入操作后生成的主键值。此配置项有助于确保主键值的正确性。 **取值**:`true`或`false`。 #### 四、总结 以上详细介绍了`hibernate.cfg.xml`...

Global site tag (gtag.js) - Google Analytics