JDBC获取新增记录的自增主键

最近在做servlet项目的时候遇到了前后表关联得到前一个自增主键的问题,以前用ibatis的时候只需要在配置文件中配置下就可以了。搜索了下发现了解决办法。

CREATE TABLE book(
     code bigint(20) unsigned NOT NULL AUTO_INCREMENT,
     kind varchar(45) NOT NULL,
     name varchar(45) NOT NULL,
     PRIMARY KEY(code, kind)
) ENGINE = InnoDB AUTO_INCREMENT = 1 DEFAULT CHARSET =  latin1

二、获取自增主键

import lavasoft.common.DBToolkit;
import java.sql.*;
/**
* JDBC获取新增记录的主键
*
* @author leizhimin 2009-12-4 13:20:15
*/
public class InsertKeyTest {
         public static void main(String[] args) {
                 insertWithStaticSQL();
                 insertWithParperedSQL();
         }
         /**
          * 预定义SQL模式,获取新增记录的主键
          */
         public static void insertWithParperedSQL() {
                 Connection conn = null;
                 try {
                         conn =  DBToolkit.getConnection();
                         String sql = "insert  into testdb.user (name, pswd) values(?,?)";
                         PreparedStatement pstmt =  conn.prepareStatement(sql, Statement.NO_GENERATED_KEYS);
                         pstmt.setString(1,  "laozhang");
                         pstmt.setString(2,  "111111");
                         pstmt.executeUpdate();
                         //检索由于执行此 Statement  对象而创建的所有自动生成的键
                         ResultSet rs =  pstmt.getGeneratedKeys();
                         if (rs.next()) {
                                 //知其仅有一 列,故获取第一列
                                 Long id =  rs.getLong(1);
                                 System.out.println("-----预定义SQL模式-----id = " + id);
                         }
                 } catch (SQLException e) {
                         e.printStackTrace();
                 } finally {
                         DBToolkit.closeConnection (conn);
                 }
         }
         /**
          * 静态SQL模式,获取新增记录的主键
          */
         public static void insertWithStaticSQL() {
                 Connection conn = null;
                 try {
                         conn =  DBToolkit.getConnection();
                         String sql = "insert  into testdb.user (name, pswd) values('ttttt','121')";
                         PreparedStatement pstmt =  conn.prepareStatement(sql, Statement.NO_GENERATED_KEYS);
                         pstmt.executeUpdate();
                         //检索由于执行此 Statement  对象而创建的所有自动生成的键
                         ResultSet rs =  pstmt.getGeneratedKeys();
                         if (rs.next()) {
                                 //知其仅有一 列,故获取第一列
                                 Long id =  rs.getLong(1);
                                 System.out.println("-----静态SQL模式-----id = " + id);
                         }
                 } catch (SQLException e) {
                         e.printStackTrace();
                 } finally {
                         DBToolkit.closeConnection (conn);
                 }
         }
}

执行结果:

-----静态SQL模式-----id = 8

-----预定义SQL模式-----id = 9


转自:http://www.bianceng.cn/Programming/Java/201104/25829.htm


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值