oracle jdbc 获取自动生成的键值,int id primary key auto_increment;
用jdbc getGenerationKey属性
================================
public static void main(String args[]) { String sql="insert into cdml_sensky_user(uuid,version) values('123','123456789')"; int rows = -1; try { Class.forName("oracle.jdbc.driver.OracleDriver"); Connection conn = DriverManager .getConnection("jdbc:oracle:thin:@ip:1521:dbname","username","pwd"); //连接数据库 conn.setAutoCommit(false); //不自动提交 // Connection conn =pool.getConnection(); PreparedStatement pstat =conn.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS); //创建一个默认 PreparedStatement 对象,该对象能获取自动生成的键,适合insert语句 //(该语句能自动生成键值)autoGeneratedKeys - 指示是否应该返回自动生成的键的标志 //它是 Statement.RETURN_GENERATED_KEYS 或 Statement.NO_GENERATED_KEYS 之一 Statement stat = conn.createStatement(); // pstat.setInt(1, -1); // pstat.setString(2,title); // pstat.setString(3,content); pstat.executeUpdate(); ResultSet rsKey = pstat.getGeneratedKeys(); //ResultSet 指示键值 rsKey.next(); int key = rsKey.getInt(1); //得到第一个键值 rsKey.close(); stat.executeUpdate("update cdml_sensky_user set uuid = " + key + " where id = " + key); conn.commit(); conn.setAutoCommit(true); //设回自动提交 pstat.close(); conn.close(); System.out.println("111"); //System.out.println("num:"+num); } catch (Exception e) { e.printStackTrace(); } //return rows; }
http://hi.baidu.com/%BD%D6%D0?%F3%B5%C1/blog/item/0d3bf6fd3e4226fbfc037fda.html
获取自动生成的键值,int id primary key auto_increment;
=======================================================================================
java.sql.SQLException: 不支持的特性
at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:134)
at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:179)
at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:269)
at oracle.jdbc.dbaccess.DBError.throwUnsupportedFeatureSqlException(DBError.java:690)
at oracle.jdbc.driver.OracleConnection.prepareStatement(OracleConnection.java:3452)
at db.NewDBManager.main(NewDBManager.java:131)
=====================================================================================
据张P说Oracle11g可以支持新特性,现在用的方法是存储过程
create or replace procedure USER_REGIST(p_version in varchar2,p_userid out number) is /** * java书城用mtk用户表注册 */ begin p_userid := -1; insert into cdml_sensky_user (id,uuid,VERSION) values (p_userid,p_userid,p_version) returning id into p_userid; --dbms_output.put_line(p_userid); update cdml_sensky_user set uuid=to_char(p_userid) where id=p_userid; commit; exception when others then rollback; p_userid := -1; end USER_REGIST; 17:53 2011-6-24 declare user_id int; begin USER_REGIST(123456789,user_id); dbms_output.put_line(user_id); end;
上一篇: 使用VSCode的Remote-SSH连接Linux进行远程开发
下一篇: php和java哪个更早