获取刚插入的主键

StringBuffer sql = new StringBuffer(" insert into tbe_paper(jointime,papername)values(?,?) ");
    
        Connection con = null;
        PreparedStatement pstmt = null;
        ResultSet  rs=null;
        int result=0;
        List<PaperModel> list=new ArrayList<PaperModel>();
        PaperModel  model=null;
        try {
            con = JdbcUtils.createInstance().getCon();
            pstmt = con.prepareStatement(sql.toString(),Statement.RETURN_GENERATED_KEYS);
        
            pstmt.setLong(1, System.currentTimeMillis());
            pstmt.setString(2, "试卷");
            pstmt.executeUpdate();
            
            rs = pstmt.getGeneratedKeys();
            if(rs.next()){
              System.out.println(rs.getInt(1));
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            JdbcUtils.release(con, pstmt, rs);
        }

第二个案例:
        boolean  b=false;
        Connection  conn=null;
        PreparedStatement st=null;
        ResultSet rs=null;
        QuestionModel  model=null;
        int result=-1;
        try {
            conn=JdbcUtils.createInstance().getCon();
            boolean autoCommit=conn.getAutoCommit();
            //关闭自动提交功能
            conn.setAutoCommit(false);
            String sql="insert into t_paper(jointime,papername)values(?,?)";
            st=conn.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS);
            st.setLong(1,System.currentTimeMillis());
            st.setString(2, paper.getPaperName());
            st.executeUpdate();
            rs=st.getGeneratedKeys();
            if(rs.next()){
                result=rs.getInt(1);
            }else{
                return b;
            }
            sql="insert into t_paper_questions(title,options,"
                    + "answer,type,point,qid,paperid)values(?,?,?,?,?,?,?)";
            st=conn.prepareStatement(sql);
            for (int i = 0; i < questions.size(); i++) {
                model=questions.get(i);
                st.setString(1, model.getTitle());
                st.setString(2, model.getOptions());
                st.setString(3, model.getAnswer());
                st.setString(4, model.getType());
                st.setInt(5, model.getPoint());
                st.setInt(6, i+1);
                st.setInt(7, result);
                st.addBatch();
            }
            int [] arr=st.executeBatch();
           
            if(arr==null || arr.length==0){
                return b;
            }
            //提交事务
            conn.commit();
            b=true;
            //恢复原来的提交模式
            conn.setAutoCommit(autoCommit);
        } catch (SQLException e) {
            System.out.println("操作失败!!!任务撤销!!!");
            try {
                conn.rollback();
            } catch (SQLException e1) {
                e1.printStackTrace();
            }
        }finally{
            JdbcUtils.release(conn, st, rs);
        }
        return b;

时间: 2024-10-08 23:01:48

获取刚插入的主键的相关文章

sqlserver中取出刚插入的主键(主键是guid类型)

create PROCEDURE Pro_test ( @userName NVARCHAR(25) ) AS -- select * from [dbo].[Table_2] -- SELECT * FROM [dbo].[Student] BEGIN BEGIN TRAN DECLARE @tempTable TABLE(tempId uniqueidentifier) DECLARE @tempId uniqueidentifier INSERT INTO TABLE_2(UserName

MySQL获取其他表的主键

通常我们在应用中对mysql执行了insert操作后,需要获取插入记录的自增主键.本文将介绍java环境下的4种方法获取insert后的记录主键auto_increment的值: 通过JDBC2.0提供的insertRow()方式 通过JDBC3.0提供的getGeneratedKeys()方式 通过SQL select LAST_INSERT_ID()函数 通过SQL @@IDENTITY 变量 1. 通过JDBC2.0提供的insertRow()方式 自jdbc2.0以来,可以通过下面的方式

mysql获取自动生成的主键报错:Generated keys not requested. You need to specify Statement.RETURN_GENERATED_KEYS to Statement.execu

今天项目中需要获取刚插入的自动增长 的主键值: pstmt=conn.prepareStatement(sql); ... rs=pstmt.getGeneratedKeys(); 谁知道报错:Generated keys not requested. You need to specify Statement.RETURN_GENERATED_KEYS to Statement.execu 上网查了之后才知道原来是5.1.5的包,替换成5.1.17之后,如下生成主键的代码都会报错: Gener

MyBatis中如何获取刚插入数据的 id

一.MyBatis中如何获取刚插入数据的 id 情景: 三张表 1.生成订单 (easybuy_order) 2.生成订单明细 (easybuy_order_detail) 3.更新商品库存 (easybuy_product) 在通过调用相应的 DAO 接口方法来实现对三张表的更新操作,并且这三步操作也是前后关联的,后一步的操作依托于上一步操作的结果,如第一步生成订单 (即在订单主表(easybuy_order)新增一条数据)之后需要获取到新增订单数据的 id 作为下一步生成订单明细的 orde

MyBatis+MySQL 返回插入的主键ID

需求:使用MyBatis往MySQL数据库中插入一条记录后,需要返回该条记录的自增主键值. 方法:在mapper中指定keyProperty属性,示例如下: <insert id="insertAndGetId" useGeneratedKeys="true" keyProperty="userId" parameterType="com.chenzhou.mybatis.User"> insert into us

hao947 : Mybatis resultMap配置插入和主键自增返回 : 好947

映射配置文件  好947  <!-- type:映射实体类的数据类型 id:resultMap的唯一标识 -->  <resultMap type="person" id="BaseResultMap">   <!-- column:库表的字段名 property:实体类里的属性名 -->   <id column="person_id" property="personId" /&g

【转载】MyBatis+MySQL 返回插入的主键ID

转载出处:http://chenzhou123520.iteye.com/blog/1849881 需求:使用MyBatis往MySQL数据库中插入一条记录后,需要返回该条记录的自增主键值. 方法:在mapper中指定keyProperty属性,示例如下: xml代码 <insert id="insertAndGetId" useGeneratedKeys="true" keyProperty="userId" parameterType=

oracle&amp;&amp;Sqlserver获取表名列名主键及数据类型

SQlserver获得列名,列类型,列类型长度,scale,prec等数据类型(syscolumns,systypes,sysobjects均为视图) select a.name as colname, b.name as typename,a.length as length,a.scale as scale,a.prec as prec from syscolumns a,systypes b ,sysobjects c where a.xusertype=b.xusertype and a

mysql 获取刚插入行id汇总

mysql 获取刚插入行id汇总 我们在写数据库程序的时候,经常会需要获取某个表中的最大序号数, 一般情况下获取刚插入的数据的id,使用select max(id) from table 是可以的.但在多线程情况下,就不行了. 下面介绍三种方法 (1) getGeneratedKeys()方法: 程序片断: Connection conn = ;        Serializable ret = null;        PreparedStatement state = .;