今天刚刚开始学习数据库事务,在需要两张表关联(同时修改或者同时回滚)的时候,
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语句连接到的是同一个对象或者是使用线程池(明天学)
今天出这个错看了两小时心态崩了