ladysosoli
2018-10-18 10:46
采纳率: 95.7%
浏览 419
已采纳

怎样用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条回答 默认 最新

  • 大川里的小川人 2018-10-18 10:56
    已采纳

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

    打赏 评论
  • danielinbiti 2018-10-18 10:56
     delete from student where classid not in (select id from class)
    
    打赏 评论
  • uniquewdl 2018-10-19 00:51

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

    打赏 评论
  • smile_zls 2018-10-19 03:14

    /**
    * 根据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);
        }
    }
    
    打赏 评论

相关推荐 更多相似问题