怎样用Java描述数据库中出现的:当出现某种情况的时候就把这一条没用的数据删掉

student表:
id name classId
1 Jack 1
2 Lily 1
3 Mike 2
4 Aom 3

class表:
id className
1 一班
2 二班

现在想要为student表添加外键约束,也就是说classsId是class表的id
但在添加外键约束的时候,因为student表中有classId为3,class表中没有这个数据,会出现1452错误
现在想要用java写一个工具当出现这种情况的时候就把这一条没用的数据删掉,用代码怎样实现呢?
就是用java代码实现这句话就行了 : 当出现这种情况的时候就把这一条没用的数据删掉
我不知道怎样开头写。

4个回答

按照楼主的意思是,将classID作为主键,studentID作为外键,首先这种约束应该是在数据库建立的时候定义的,如果在代码层,如果插入一条class表没有的记录时会报错的。
此时,如果想在代码层给表添加代码约束,如果没有对应记录是不行的,所以就只有正常的在catch异常部分进行删除多余数据,删除方法就是普通的数据库访问操作。

 delete from student where classid not in (select id from class)

DELETE FROM STUDENT T WHERE T.CLASSID NOT IN (SELECT ID FROM CLASS),可以把这个语句放在你插入语句之前,而且尽量放在一个事务里边。首先删除没有对应的classid,然后再进行插入,这样的话就可以避免找不到外键而报错。

/**
* 根据id查询班级信息
* @param id
* @return
*/
public Class classTable(Integer id){

    String sql = "select id,className from class where id=?";

    Connection con = null;
    PreparedStatement ps = null;
    ResultSet rs = null;
    con = DaoTool.getCon();  //自己从连接池获取连接
    Class classInfo = new Class();
    try {
        ps = con.prepareStatement(sql);
        ps.setInt(1, id);
        rs = ps.executeQuery();

        if (rs.next()) {


            Class.setId(rs.getInt("id"));
            Class.setClassName(rs.getString("className"));
        }
    } catch (SQLException e) {
        e.printStackTrace();
    } finally {
        DaoTool.closeAll(con, ps, rs);

    }
    return classInfo;

}
/**
 * 根据classId删除学生信息
 * @param idclassId
 */

public void delStudent(Integer classId){

    String sql = "delete from student where classId=?";

    Connection con = null;
    PreparedStatement ps = null;
    con = DaoTool.getCon();  //自己从连接池获取连接

    try {
        con.setAutoCommit(false); //关闭自动事务  
        ps = con.prepareStatement(sql);
        ps.setInt(1, classId);

        ps.executeUpdate();
        con.commit();  //事务提交

    } catch (SQLException e) {
        e.printStackTrace();
        try {
            con.rollback();  //事务回滚
        } catch (SQLException e1) {
            e1.printStackTrace();
        }
    } finally {
        DaoTool.closeAll(con, ps, rs);

    }

}

public static void main(String[] args) {
    Integer id=3;
    if(类名/对象名.classTable(id)==null){
      类名/对象名.delStudent(3);
    }
}
qq_35310633
StupidBoy__ 回复ladysosoli: 如果想让classId是查询出来的,那就先查一下student表
11 个月之前 回复
ladysosoli
ladysosoli 对呀,我知道怎样做,但是不知道怎么用java代码实现~想请教一下用java代码怎样实现呢
11 个月之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!