该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
我同时执行了两条sql语句,第二条故意写少一个问号,按道理错误了应该回滚两条sql语句都没成功才对,可是结果第一条sql语句还是成功执行插入了。新手求教。
public int addStu(Student stu){
int flag=0;
PreparedStatement ps=null;
Connection conn=ConnBean.getConnection();
try{
String sql="select userID from student where userID=? UNION select userID from login where userID=?";
ps=conn.prepareStatement(sql);
ps.setString(1, stu.getUserID());
ps.setString(2, stu.getUserID());
ResultSet rs=ps.executeQuery();
if(rs.next()){//如果学生编号已存在,返回-1
flag=-1;
rs.close();
ps.close();
}else{//如果学生编号不存在,则添加学生信息
try{
System.out.print("第-2条");
conn.setAutoCommit(false);
System.out.print("第-1条");
sql="insert into student values(?,?,?,?,?,?)";
ps=conn.prepareStatement(sql);
System.out.print("第0条");
ps.setString(1, stu.getUserID());
ps.setString(2, stu.getUserName());
ps.setString(3, stu.getSex());
ps.setString(4, stu.getBirth());
ps.setString(5, stu.getGrade());
ps.setString(6, stu.getCollege());
ps.executeUpdate();
System.out.print("第一条");
sql="insert into login values(?,?,?)";
ps=conn.prepareStatement(sql);
ps.setString(1, stu.getUserID());
ps.setString(2, stu.getUserName());
ps.setString(3, stu.getBirth());
ps.setInt(4, 2);
ps.executeUpdate();
System.out.print("第二条");
conn.commit();
flag=2;
System.out.print("成功执行");
ps.close();
}catch(SQLException e1){
System.out.println("执行回滚");
conn.rollback();
System.out.println("回滚成功");
//conn.setAutoCommit(true);
}
}
conn.close();
}catch(Exception e){
e.printStackTrace();
System.out.println("错误");
}
return flag;
}