在一个事务中,插入一个子节点,并更新父节点。在更新父节点时出错错误提示:
java.sql.SQLException: [Microsoft][SQLServer 2000 Driver for JDBC]Can't start a cloned connection while in manual transaction mode.代码:
public static void saveChild(Category c) {
Connection conn = null;
String sql = "insert into category(pid,name,descr,leaf,grade) values (?,?,?,?,?)";
PreparedStatement pstmt = null;
try {
conn = DB.getConnection();
conn.setAutoCommit(false);
// 插入一个子节点
pstmt = DB.getPstmt(conn, sql);
pstmt.setInt(1, c.getPid());
pstmt.setString(2, c.getName());
pstmt.setString(3, c.getDescr());
pstmt.setInt(4, c.isLeaf() == true ? 1 : 0);
pstmt.setInt(5,c.getGrade());
pstmt.executeUpdate();
System.out.println("PID="+c.getPid());
// 更新父节点
DB.executeUpdate(conn, "update category set leaf = 0 where id= "+c.getPid());
System.out.println("err2");
conn.commit();
conn.setAutoCommit(true);
} catch (SQLException e) {
try {
conn.rollback();
} catch (SQLException e1) {
e1.printStackTrace();
}
e.printStackTrace();
} finally {
DB.closePstmt(pstmt);
DB.closeConn(conn);
}
}更新父节点的执行方法:
public static void executeUpdate(Connection conn,String sql) {
try {
//错误定位在这个语句上
conn.createStatement().executeUpdate(sql);
} catch (SQLException e) {
e.printStackTrace();
}
}结果:
事务没有回滚,子节点被插入,父节点没有更新,错误发生在下面这个语句上:
conn.createStatement().executeUpdate(sql);
java.sql.SQLException: [Microsoft][SQLServer 2000 Driver for JDBC]Can't start a cloned connection while in manual transaction mode.代码:
public static void saveChild(Category c) {
Connection conn = null;
String sql = "insert into category(pid,name,descr,leaf,grade) values (?,?,?,?,?)";
PreparedStatement pstmt = null;
try {
conn = DB.getConnection();
conn.setAutoCommit(false);
// 插入一个子节点
pstmt = DB.getPstmt(conn, sql);
pstmt.setInt(1, c.getPid());
pstmt.setString(2, c.getName());
pstmt.setString(3, c.getDescr());
pstmt.setInt(4, c.isLeaf() == true ? 1 : 0);
pstmt.setInt(5,c.getGrade());
pstmt.executeUpdate();
System.out.println("PID="+c.getPid());
// 更新父节点
DB.executeUpdate(conn, "update category set leaf = 0 where id= "+c.getPid());
System.out.println("err2");
conn.commit();
conn.setAutoCommit(true);
} catch (SQLException e) {
try {
conn.rollback();
} catch (SQLException e1) {
e1.printStackTrace();
}
e.printStackTrace();
} finally {
DB.closePstmt(pstmt);
DB.closeConn(conn);
}
}更新父节点的执行方法:
public static void executeUpdate(Connection conn,String sql) {
try {
//错误定位在这个语句上
conn.createStatement().executeUpdate(sql);
} catch (SQLException e) {
e.printStackTrace();
}
}结果:
事务没有回滚,子节点被插入,父节点没有更新,错误发生在下面这个语句上:
conn.createStatement().executeUpdate(sql);
解决方案 »
- SSH2框架搭建
- 我现在想实现qq邮箱的预览功能,结果就纠结了........求教高手!!!
- 200分,我就求一个解决方案,不够再追加。
- 于JSP两个多选列表,动态将左边的选项移到右边或从右移到左边
- 大家相信吗?相同的文件用FileInputStream两次,得到的流竟然不一样!!
- java该怎么学啊
- 网页下拉框动态数据该怎么实现
- 我的做了一个表单来处理让user给我留言 但是却不能处理中文字符~!!!????我该怎么办???
- 关于中文显示的问题 高手帮忙 在线等待
- javamail的问题,高手进来。
- 怎样改变tomcat的默认欢迎界面
- 一个sqlException,大家帮忙看看关于Preparedstatement的
conn = DriverManager.getConnection("jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=pubs;SelectMethod=Cursor;User=User;Password=Password");