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

时间:2018-12-13 06:41:35

标签: java mysql

我正在创建一个图书馆程序,当学生借书时,该书将从图书馆表中删除并添加到借书表中。我的查询给了我一个未初始化的当前语句至少一个参数的异常

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());
    }
} 

2 个答案:

答案 0 :(得分:-1)

在此LOC中

String query3="insert into borrowedbooks values(?,?,?,?,?)";

您有5个参数,并在以下LOC中按1逐个填写它们

     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());

但是在Update查询中,您也有一个参数,但是没有在其中添加任何值。这就是导致此问题的原因。使用先前已经创建的语句,而无需创建另一个。您尝试运行的语句称为准备语句。尝试运行下面的书面代码。

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

答案 1 :(得分:-1)

此设计是较差的设计。请重新设计数据库结构。示例如下。如果某个学生得到一本书,则相关的学生ID,书ID和日期会作为新记录添加到借书表中

enter image description here