不在Java中保存到MySQL数据库
我创建了一个表单,将药物信息插入数据库 仅需要ItemID、ItemName和到期日期。 如果需要,用户可以添加其他详细信息 我的上述功能代码不在Java中保存到MySQL数据库,java,mysql,Java,Mysql,我创建了一个表单,将药物信息插入数据库 仅需要ItemID、ItemName和到期日期。 如果需要,用户可以添加其他详细信息 我的上述功能代码 private void Save_btnActionPerformed(java.awt.event.ActionEvent evt) { try { String id = itemid_txt.getText(); String
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)代码>
帮我纠正这个
您仅初始化else if
子句中的PreparedStatement
。else
部分既没有sql字符串也没有准备好的语句。Statepst=conn.prepareStatement(sql)在您的if-else
条件之前,当前它将仅在第一个else-if
部分中初始化,否则pst
将在后续的else-if
和else
块中null您的preparedStatement对象引用null,因为它仅在if-else-if-if-if-if-if的if块中初始化建筑
要解决此问题,请在if-else-if块外部初始化preparedStatement,或在每个if、elseif和else块中初始化它。
还有一件事,您没有在代码中关闭preparedStatement,这可能会导致内存泄漏,并将导致内存不足或将来以更高的事务速率连接到DB