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

aliasName;

在Oracle中,网上有多种方案,但是程序老是有问题。所以自己研究后,有两种方案:

1,用JDBC的getGeneratedKeys,返回的是Oracle

的rowid.但是就是修改代码,比较麻烦,第一次返回rowid, 第二次再通过rowid再查一次数据库。

String sql = "insert into xx_cust(cust_type,cust_name,login_name)"

+ " values('ipn','aaa','bb')";

Connection conn = DBConnectionManager.getConnection();

PreparedStatement sta = conn.prepareStatement(sql,

Statement.RETURN_GENERATED_KEYS);

sta.execute();

System.out.println(sta.getGeneratedKeys());

ResultSet rest = sta.getGeneratedKeys();

rest.next();

String rowid=rest.getString(1);

System.out.println("rowid="+rowid);

PreparedStatement stat=conn.prepareStatement("select cust_id from xx_cust where rowid=?");

stat.setString(1, rowid);

ResultSet rest2 = stat.executeQuery();

rest2.next();

String custId=rest2.getString(1);

System.out.println("custid="+custId);

2,通过用Oracle

的returning 语句

因为要用到oracle自己的API,所以如何用到像c3po等通用数据库连接池的话可以不能用。但是在数据库只连接一次。

代码如下:

Class.forName("oracle.jdbc.driver.OracleDriver").newInstance();

String url="jdbc:oracle:thin:@192.168.3.95:1521:tdm"; //orcl为数据库的SID

String user="pesup";

String password="pesup";

Connection conn= DriverManager.getConnection(url,user,password);

String sql = "insert into xx_cust(cust_type,cust_name,login_name)"

+ " values('ipn','aaa','bb') returning cust_id into ?";

OraclePreparedStatement sta = (OraclePreparedStatement) conn

.prepareStatement(sql);

sta.registerReturnParameter(1, OracleTypes.INTEGER);

int count = sta.executeUpdate();

if (count > 0) {

ResultSet rset = sta.getReturnResultSet();

while (rset.next()) {

String name = rset.getString(1);

System.out.println("name=" + name);

}

}

----------------------------------------------------------------------------------------------

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

在应用中,很多时候会对表的主键用一个自动增涨的数来付值,如Oracle的sequence,插入后又想得到的主键的值。下面介绍一下相关的方法。

1,用Oracle 的returning 语句。

PreparedStatement sta = conn.prepareStatement("INSERT INTO LOGGING VALUES (TESTSEQ.NEXTVAL,SYSDATE)returning id into ? ");

sta.execute();

ResultSet rset = sta.getResultSet();

while(rset.next())

{

int id = rset.getInt(1);

}

2,用JDBC的getGeneratedKeys,返回的是Oracle 的rowid.

PreparedStatement sta = conn.prepareStatement("INSERT INTO TESTTABLE VALUES (TESTSEQ.NEXTVAL,'aaaa')",Statement.RETURN_GENERATED_KEYS);

sta.execute();

System.out.println(sta.getGeneratedKeys());

ResultSet rest = sta.getGeneratedKeys();

rest.next();

//oracle rowid

System.out.println(rest.getString(1));

--------------------------------------------------------------------------------------------

获取自动生成的键值,int id primary key auto_increment;

Class.forName("com.mysql.jdbc.Driver");

Connection conn = DriverManager

.getConnection("jdbc:mysql://localhost/BBS?user=root&password=root"); //连接数据库

conn.setAutoCommit(false); //不自动提交

String sql = "insert into article values (null,0,?,?,?,now(),0)";

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 article set rootid = " + key + " where id = " + key);

conn.commit();

conn.setAutoCommit(true); //设回自动提交

pstat.close();

conn.close();

本文原创发布php中文网,转载请注明出处,感谢您的尊重!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值