JDBC获取新增记录的自增主键
来源:优易学  2011-12-10 16:24:02   【优易学:中国教育考试门户网】   资料下载   IT书店

  常常在使用Hibernate、iBatis时候,当插入一条数据的时候,实体Bean的原空主键就赋上新值了。

  在JDBC中,也可以通过变相的手法来做到这点。下面是个测试的小例子。

  一、环境

  MySQL5.1

  mysql-connector-java-5.1.10

  jdk1.5

  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获取新增记录的主键

  *

  */

  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

  Process finished with exit code 0

责任编辑:小草

文章搜索:
 相关文章
热点资讯
热门课程培训