Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/29.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 尝试从JList中删除项目时出现逻辑错误_Java_Mysql_Data Access Layer - Fatal编程技术网

Java 尝试从JList中删除项目时出现逻辑错误

Java 尝试从JList中删除项目时出现逻辑错误,java,mysql,data-access-layer,Java,Mysql,Data Access Layer,我有一个JList,其中显示了我添加到数据库中的所有项目。当我想删除多个项目时,比如说两个项目,只删除其中一个。这是我的代码: 此方法来自我的类DAL: public void removeStudent(Student student)throws SQLException{ PreparedStatement studentStatement = getConnected().prepareStatement( "delete from student where spnr =

我有一个JList,其中显示了我添加到数据库中的所有项目。当我想删除多个项目时,比如说两个项目,只删除其中一个。这是我的代码: 此方法来自我的类DAL:

public void removeStudent(Student student)throws SQLException{
  PreparedStatement studentStatement = getConnected().prepareStatement(
    "delete from student where spnr = ? and sname = ? and sadress = ? " +
     " and stel = ? ");

  studentStatement.setString(1, student.getIdNumber());
  studentStatement.setString(2, student.getName());
  studentStatement.setString(3, student.getAddress());
  studentStatement.setString(4, student.getTel());
  studentStatement.executeUpdate();
}
类控制器:

public void removeStudent(Student student) throws SQLException{
  dal.removeStudent(student);
}
和阶级观点。单击“移除”按钮时在actionListener中使用

private void removeStudent(){
  try{
    controller.getDal().getStudentData().getName();
    controller.getDal().getStudentData().getAddress();
    controller.getDal().getStudentData().getIdNumber();   
    controller.getDal().getStudentData().getTel();

    controller.removeStudent(controller.getDal().getStudentData());
  }catch(Exception e){
    e.printStackTrace();
  }
}
行动事件呢

if(infLst.getSelectedIndex() > -1){
  int choice = JOptionPane.showConfirmDialog(null, 
                 "Delete?" + "The student will be permamently deleted",
                 null,
                 JOptionPane.YES_NO_OPTION);
  if(choice == JOptionPane.YES_OPTION){
    //Removes from the JList            
    ((DefaultListModel)infLst.getModel()).removeElementAt(index);
    //And database 
    removeStudent();
  }else{
    return;
  }
}else{
  JOptionPane.showMessageDialog(null, "Please make sure you have selected an item from the list");
}
}}});
请考虑我是这个数据库编程领域的新手。提前谢谢

当我想删除多个项目时,比如说两个项目,只删除其中一个

您的代码只有一个if条件,用于检查所选索引,以便它只删除一个项目

如果要删除所有选定的值,则需要使用JList中返回多个要删除的值的方法。查看API中其他可用于此目的的
getSelected…()
方法。然后需要创建一个循环来删除所有值


返回不带索引值的对象的方法将更易于使用,因为您可以从模型中删除对象,而不必担心先删除较高的索引值。

我使用单间隔选择。我真的不想选择要删除的三项。我想一次删除三个项目。示例:选择项目1-->删除,选择项目2-->删除,依此类推。问题不在列表中。这两个项目都从列表中删除,问题是数据库中的项目仍然存在,即使我已将其从列表中删除JList@Eskipo,您的SQL语句有一个“where子句”,因此只有符合该条件的记录才会被删除。由于您只从JList中删除一项,因此从数据库表中只删除一行也是有意义的。也就是说,每个学生都有一个唯一的id号。如果事实上您甚至不需要where语句中的所有其他数据来删除学生,那么id号应该足够了。好的,但是SQL语句看起来应该不同吗?也许从学生身上删除?这能解决问题吗?问题是,当我在命令行中测试程序时,我可以从数据库中删除这两项。使用JList时会出现此问题。