关于序列尚未在此会话创建的问题

今天刚刚开始学习数据库事务,在需要两张表关联(同时修改或者同时回滚)的时候,
 String sql = "insert into t_order(nid,userid,useraddress) values(seq_t_order.nextval,?,?)";
 commomUpate(sql, "3", "上海路");

 String sql2 = "insert into t_items(nid,norderid,nmcid) values(seq_t_items.nextval,seq_t_order.currval,?)";
 commomUpate(sql2, "15");

出现了“java.sql.SQLException: ORA-08002: 序列 SEQ_T_ORDER.CURRVAL 尚未在此会话中定义 “的问题,原因是

 // 2、建立与数据库的连接通道
 conn = DriverManager.getConnection(url, user, password);

在建立连接的时候这两张表的连接对象并不是同一个,所以说t_items表的seq_t_order序列并得不到上个SQL语句执行后的nextval值。

解决方法是

           //保存到订单表
            pst = conn.prepareStatement(sql);
            pst.setObject(1,"2");
            pst.setObject(2,"111上海路");
            pst.execute();
             //保存到商品表
            pst = conn.prepareStatement(sql2);
            pst.setObject(1,"19");
            // 4、执行
            pst.executeUpdate();
            //提交
            conn.commit();

需要直接在方法中进行添加来保证两个SQL语句连接到的是同一个对象或者是使用线程池(明天学)

今天出这个错看了两小时心态崩了

猜你喜欢

转载自blog.csdn.net/weixin_38155419/article/details/79990775
今日推荐