ORACLE JDBC的getGeneratedKeys
来源:互联网 发布:软件开发怎么学 编辑:程序博客网 时间:2024/06/04 18:52
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 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,而且驱动程序的体积更小。
- ORACLE JDBC的getGeneratedKeys
- ORACLE JDBC的getGeneratedKeys
- ORACLE JDBC的getGeneratedKeys
- oracle 获取插入 id getGeneratedKeys
- 关于jdbc保存后,返回自动增长的id,使用stmt.getGeneratedKeys();
- 在JAVA中查询刚插入的记录ID 利用JDBC的getGeneratedKeys获得INSERT插入后生成的主键ID
- 在JAVA中查询刚插入的记录ID 利用JDBC的getGeneratedKeys获得INSERT插入后生成的主键ID
- jdbc的写法 oracle
- ORACLE的jdbc版本
- JDBC,Oracle的大数据
- JDBC-简单的Oracle连接
- jdbc连接Oracle的代码
- Oracle JDBC驱动的问题
- JDBC与Oracle的连接
- ORACLE的JDBC简单写法
- mysql oracle JDBC 的url
- JDBC连接Oracle的Demo
- Oracle的JDBC驱动知识
- 纯CSS代码实现翻页
- Nutch在Windows中安装之细解
- windows下mysql忘记root密码的解决方法
- Azkaban的快速搭建
- 移动端webapp开发必备知识
- ORACLE JDBC的getGeneratedKeys
- cocos2d-x 编写的金币显示板(单个数字的)
- eclipse使用小问题
- POJ1082:Calendar Game
- poj 2117 Electricity--割点
- Java中存在着两种Random函数:
- Android内存泄露
- AMR音频编码器概述及文件格式分析
- 删除Hudson的Porject的方法