Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/376.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 减少一个数据库表中的一项并将其添加到另一个表中_Java_Mysql - Fatal编程技术网

Java 减少一个数据库表中的一项并将其添加到另一个表中

Java 减少一个数据库表中的一项并将其添加到另一个表中,java,mysql,Java,Mysql,我正在创建一个图书馆程序,当学生借书时,它将从图书馆表中删除并添加到借书表中。我的查询为当前语句os uninitialized提供了至少一个参数的异常 private void jButton6ActionPerformed(java.awt.event.ActionEvent evt) { // TODO add your handling code here: try{ Con

我正在创建一个图书馆程序,当学生借书时,它将从图书馆表中删除并添加到借书表中。我的查询为当前语句os uninitialized提供了至少一个参数的异常

private void jButton6ActionPerformed(java.awt.event.ActionEvent evt) {                                         
    // TODO add your handling code here:
    try{
        Connection con=CreateDB.getConnection();
         String query3="insert into borrowedbooks values(?,?,?,?,?)";
         PreparedStatement statement=con.prepareStatement(query3);
         statement.setString(1, regNo.getText());
         statement.setString(2, names.getText());
         String value3=sClass.getSelectedItem().toString();
         statement.setString(3, value3);
         statement.setString(4, ((JTextField)date.getDateEditor().getUiComponent()).getText());
         statement.setString(5, title.getText());


         statement.execute();

         String query4="update bookentry set copies=copies-1 where title=?";
         Statement st=con.createStatement();
         st.executeUpdate(query4);


         JOptionPane.showMessageDialog(null,"Book lent Successfully");
    }
    catch(Exception ex){
        JOptionPane.showMessageDialog(null, ex.getMessage());
    }
} 
在这个地方

String query3="insert into borrowedbooks values(?,?,?,?,?)";
您有5个参数,并在以下LOC中逐个填写

     statement.setString(1, regNo.getText());
     statement.setString(2, names.getText());
     String value3=sClass.getSelectedItem().toString();
     statement.setString(3, value3);
     statement.setString(4, ((JTextField)date.getDateEditor().getUiComponent()).getText());
     statement.setString(5, title.getText());
但是在更新查询中,您也有一个参数,但没有向其中添加任何值。这就是造成问题的原因。使用先前已创建的语句,无需创建另一个语句。您尝试运行的语句称为“准备语句”。尝试运行下面编写的代码

String query4="update bookentry set copies=copies-1 where title=?";
statement=con.prepareStatement(query4);
statement.setString(1, title.getText());
statement.executeUpdate();

这个设计很差。请重新设计数据库结构。下面给出了一个例子。如果某个学生得到一本书,相关的学生id、图书id和日期将作为新记录添加到借阅图书表中


这是一个糟糕的设计。重新思考您的方法这不是代码审查。如果您想查看代码,应该转到。