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

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

相关推荐

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

    在Java编程中,JDBC(Java Database Connectivity)...正确地使用预编译的`PreparedStatement`可以提高代码的可读性和安全性,同时,通过设置`RETURN_GENERATED_KEYS`属性,我们可以轻松地获取新插入记录的自增主键值。

    Mybatis与JDBC批量插入MySQL数据库性能测试

    测试过程中,我们可以记录以下指标:总耗时、每秒插入速率、CPU和内存使用情况。通过多次运行并取平均值,可以得出较为准确的性能比较。 在资源包中,你将找到相关的文档,详细描述了测试环境的搭建、测试代码的...

    jdbc批量插入大字段

    因此,"jdbc批量插入大字段"这个话题旨在探讨如何高效地通过Java JDBC来实现Blob字段的批量插入,以提高性能。 首先,我们需要了解JDBC(Java Database Connectivity),它是Java编程语言与各种数据库之间通信的...

    JDBC批量插入 更新 删除等操作

    #### 一、JDBC批量插入 JDBC(Java Database Connectivity)是Java平台中用来标准地连接数据库的技术。通过JDBC,Java应用程序可以与多种类型的数据库进行交互,实现数据的读取、写入等功能。批量操作是指在一次...

    java jdbc 线程插入记录

    JDBC 用线程写入mysql数据库记录10万条,测试本机127.0.0.1写入速度约 482条/秒,测试代码端显示约需要124秒,SQL分析数据结果是480条左右,除去前后两秒无效数据,统计SQL如下 select max(num),min(num),avg(num) ...

    mysql取得自动增长的主键值

    ### MySQL获取自动增长的主键值 在MySQL数据库中,自动增长...通过以上知识点的学习,我们可以更好地理解和掌握MySQL中获取自动增长主键值的方法及其应用场景,这对于日常的数据库管理和应用开发都有着重要的意义。

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

    在Java编程中,当我们使用Java Database Connectivity (JDBC) API来执行插入操作时,有时我们需要获取新插入记录的自增主键值。标题"java使用jdbc插入信息时获取id1"指的是在Java程序中,通过JDBC执行SQL插入语句后...

    MybatisPlus中插入数据后获取该对象主键值的实现

    在MybatisPlus中,插入数据并获取对象的主键值是一个常见的需求,特别是在需要跟踪新插入记录的唯一标识时。MybatisPlus提供了一种简便的方式来实现这一功能。本篇文章将详细解释如何在MybatisPlus中实现这一操作,...

    jdbc-批量插入数据

    本文将深入探讨如何使用JDBC进行批量插入数据,这在处理大量数据时能显著提高性能。 批量插入数据是数据库操作中常见的一种优化策略,特别是在数据分析、数据迁移或大数据处理等场景。传统的单条插入方式可能会导致...

    支持主键自增的数据库获取主键值.zip

    在某些数据库中,如MySQL,可以使用`LAST_INSERT_ID()`函数来获取最近插入记录的自增主键值。但这种方式并不适用于所有数据库,因此MyBatis提供了更通用的解决方案,即通过JDBC的`Statement.getGeneratedKeys()`方法...

    java jdbc 利用 bonecp 四线程同时向四张表插入记录

    java 向mysql 插入记录,用bonecp 多线程并行插入记录 用acer 3750g测试结果500-600条/秒/每张表,台式机更快一些约800条/秒/每张表,分析用的SQL语句 select max(num),min(num),avg(num) from ( select count(*) num...

    bitumen:通过 JDBC 支持的数据库模拟键值存储的 Java 客户端库

    基于 JDBC 支持的数据库的键值存储 专为 Java 8 及更高版本设计,与 Java 7 及更高版本兼容。 用法 该库处于 Alpha 阶段。 期待突破性的变化。 Maven 坐标 Bitumen 尚未在任何公共 Maven 存储库中,因此您应该运行...

    用JDBC向Students表中插入数据

    本文将详细讲解如何使用JDBC(Java Database Connectivity)来向一个名为“Students”的数据库表中插入数据,同时也会涉及Oracle数据库和Java的相关知识点。 首先,JDBC是Java语言与各种数据库交互的一套标准接口,...

    三种JDBC批量插入编程方法的比较

    在Java的数据库编程中,JDBC(Java Database Connectivity)提供了多种方法来实现数据的批量插入,从而提高数据库操作的效率。本篇文章将深入探讨三种不同的JDBC批量插入编程方法,并进行对比分析,以帮助开发者更好...

    java实现jdbc批量插入数据

    本篇文章将详细介绍如何使用Java实现JDBC批量插入数据,并比较三种常见的JDBC批量插入编程方法。 **方法一:使用PreparedStatement加批量的方法** PreparedStatement是Statement的子接口,允许预编译SQL语句,这...

    使用JDBC插入大量数据的性能测试

    使用jdbc向数据库插入100000条记录,分别使用statement,PreparedStatement,及PreparedStatement+批处理3种方式进行测试:1、使用statement插入100000条记录  使用jdbc向数据库插入100000条记录,分别使用...

    使用log4jdbc更有效的记录java sql日志.docx

    Log4jdbc 提供了多种日志类别,如 `jdbc.sqlonly` 只记录 SQL,`jdbc.sqltiming` 记录 SQL 和执行时间,`jdbc.audit` 记录所有 JDBC 调用(除 ResultSet 外),`jdbc.resultset` 记录 ResultSet 信息,而 `jdbc....

    java利用jdbc连接数据库之插入数据.docx

    ### Java利用JDBC连接数据库之插入数据 #### 技术方案概述 本文档详细介绍了如何使用Java编程语言结合JDBC(Java Database Connectivity)技术来实现与数据库的连接,并完成数据的插入操作。JDBC是一种用于执行SQL...

    基于jdbc的异构数据库记录复制

    描述中的“小程序”可能是一个自包含的Java应用程序,它使用JDBC驱动程序连接到各个数据库,读取源数据库中的记录,并将这些记录插入到目标数据库中。这个过程通常涉及到以下步骤: 1. **连接数据库**:通过JDBC的...

    使用 JDBC 将 XML 中的数据插入到数据库

    本篇文章将详细讲解如何使用JDBC将XML中的数据插入到数据库。 首先,我们需要理解XML的基本结构。XML是一种自描述的标记语言,它通过标签来定义数据元素。例如: ```xml <name>John Doe <age>35 <position>...

Global site tag (gtag.js) - Google Analytics