现在的位置: 首页 > 综合 > 正文

Jdbc的扩展–获取自动生成的主键id

2014年03月06日 ⁄ 综合 ⁄ 共 1416字 ⁄ 字号 评论关闭

                                                                                                         Jdbc的扩展--获取自动生成的主键id

一  使用目的

    在两个表关联的时候,如果一个表的主键是自动生成的,一个表的主键是没有自动生成,当要通过没有自动生成的表中的id去查询自动生成的id时,需要获取

二  代码分析

    public void insert(){

       Connection con = null;

       PreparedStatement st = null;

       ResultSet rs = null;

 

       try {

           // 获取连接

           con = DBManager.getConnection();

           // 定义sql语句

           String sql = "insert into users(name,password) values(?,?)";

           // 创建预处理对象

           //Statement.RETURN_GENERATED_KEY只对插入的有效,如果抛获取的自动生成的ID失败,加上这句话

           st = con.prepareStatement(sql,Statement.RETURN_GENERATED_KEYS);

           //为占位符赋值

           st.setString(1, "tom");

           st.setString(2, "QAZ");

          

           // 执行更新

           st.executeUpdate();

          

           //得到自动生成的ID,得到的是一个结果集,结果集是单行单列的

           rs = st.getGeneratedKeys();

           if(rs.next()){

              System.out.println(rs.getInt(1));

           }

       } catch (SQLException e) {

           // TODO Auto-generated catch block

           e.printStackTrace();

       } finally {

           DBManager.release(con, st, rs);

       }

    }

注:最关键的一句话:

    rs = st.getGeneratedKeys();

    是通过预处理对象获取自动生成的id

 在运行过程中,可能会抛异常

Generated keys not requested. You need to specify Statement.RETURN_GENERATED_KEYS to Statement.executeUpdate() or Connection.prepareStatement()异常,那么这句话就必须这样写了:

    St = con.prepareStatement(sql,Statement.RETURN_GENERATED_KEYS);

    一般情况下是不用写Statement.RETURN_GENERATED_KEYS的

抱歉!评论已关闭.