不用Java保存到MySQL数据库中

时间:2015-08-22 06:13:21

标签: java mysql

我创建了一个表单,用于将药物信息插入数据库。

仅需要ItemID,ItemName和到期日期。 如果需要,用户可以添加其他详细信息。

我的上述功能代码;

private void Save_btnActionPerformed(java.awt.event.ActionEvent evt) {                                         
    try {
        String id = itemid_txt.getText();
        String name = itemname_txt.getText();
        String rec=reclevel_txt.getText();
        String qty=qty_txt.getText();
        String wp =wprice_txt.getText();
        String sp =sprice_txt.getText();
        Date expp =expday_chooser.getDate();
        String dess = des_txtarea.getText();

        String date = ((JTextField)dayChooser.getDateEditor().getUiComponent()).getText();

        String exp = ((JTextField)expday_chooser.getDateEditor().getUiComponent()).getText();
        String des = des_txtarea.getText();

        if(id==null && name==null && exp==null){
            JOptionPane.showMessageDialog(null, "Fill required fields(Item ID ,Item Name ,Exp Date) and Try again...");

        }else if(wp!=null && sp!=null && rec!=null && qty!=null && exp==null){


            String sql = "Insert into druginfo (ItemID,ItemName,AddedDate,RecorderLevel,InStock,WSPrice,CostPrice,ExpDate,Description)values (?,?,?,?,?,?,?,?,?)";

            pst=conn.prepareStatement(sql);

            pst.setString(1, id);
            pst.setString(2, name);
            pst.setString(3, date);
            pst.setString(4, dess);           
            pst.setString(5, qty);
            pst.setString(6, wp);
            pst.setString(7, sp);
            pst.setString(8, exp);
            pst.setString(9, des);
        }else{
            pst.setString(1, id);
            pst.setString(2, name);
            pst.setString(3, date);
            pst.setString(4, null);           
            pst.setString(5, null);
            pst.setString(6, null);
            pst.setString(7, null);
            pst.setString(8, null);
            pst.setString(9, des);
        }
        pst.execute();

        JOptionPane.showMessageDialog(null, "New Item Data Saved...");

        itemid_txt.setText(null);
        itemname_txt.setText(null);
        reclevel_txt.setText(null);
        qty_txt.setText(null);        
        wprice_txt.setText(null);
        sprice_txt.setText(null);
        expday_chooser.setDate(null);
        des_txtarea.setText(null);
    } catch (SQLException ex) {
        Logger.getLogger(InventoryManagementenew.class.getName()).log(Level.SEVERE, null, ex);
    }



}

但是当只给出给定的必填字段和所有字段时,不添加到数据库。代码抛出java.lang.NullPointerException

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at com.bit.project.InventoryManagementenew.Save_btnActionPerformed(InventoryManagementenew.java:468)
at com.bit.project.InventoryManagementenew.access$500(InventoryManagementenew.java:27)
at com.bit.project.InventoryManagementenew$6.actionPerformed(InventoryManagementenew.java:366)

第468行是pst.setString(1, id);

帮我纠正一下。

enter image description here

3 个答案:

答案 0 :(得分:3)

您只需初始化PreparedStatement子句中的else ifelse部分既没有sql字符串也没有预准备语句。

答案 1 :(得分:2)

状态pst=conn.prepareStatement(sql);在您的if-else条件之前,它只会在第一个else if部分初始化,否则pst将在null后续else-if }和else阻止。

答案 2 :(得分:2)

您的preparedStatement对象引用null,因为它仅在if-else-if构造的块中初始化。 要解决此问题,请在if-else-if块之外初始化preparedStatement,或者在每个块if,elseif和else中初始化它。 你还没有在代码中关闭preparedStatement,这可能导致内存泄漏,并且将来会导致内存不足或与DB的连接过多。