【发布时间】:2013-07-27 11:45:45
【问题描述】:
我在使用 java 更新 MySQL 中的数据库时遇到问题。具体来说,这个问题发生在我更新分数(来自 GUI 界面的最后一个分数)之后。更新成功但是当我尝试检索更新的记录时.它给了我一个空指针异常(将记录的图片的值设置为null)。由于编写的代码量,我决定只插入我为更新数据库而编写的代码。主要问题是在更新数据库中的最后一条记录之后,当检索记录时,图片的值设置为 null,这给了我一个 java.lang.null 指针异常。请在这里帮助我。提前致谢。 更新代码
private void upActionPerformed(java.awt.event.ActionEvent evt) {
//checks if user wants to update an empty field or record.
if ( m.equals("") || f.equals("") || l.equals("") || g.equals("") || d.equals("") || p.equals("") || a.equals("")) {
JOptionPane.showMessageDialog(null, "Please fill in all the details");
}else if(fi.equals("")){
JOptionPane.showMessageDialog(null,"Please re-update picture");
}
else{
int confirmUpdate = JOptionPane.showConfirmDialog(null, "Are you sure you want to update this record?", "Confirm Update", JOptionPane.YES_NO_OPTION);
if (confirmUpdate == JOptionPane.YES_OPTION) {
try {
Class.forName("com.mysql.jdbc.Driver");
con = DriverManager.getConnection("jdbc:mysql://localhost/ass1", "root", "root");
//SQL update statement to update record based on prmary key mn.
ps = con.prepareStatement("Update Student SET fn=?,ln=?,gn=?,dp=?,pn=?,ad=?,mt=?,ph=?,ch=?,zo=?,pp=?,pc=?,pz=?,tt=?,av=?,gd=?,re=?,pic=?,fil=? Where mn='" + m + "'");
ps.setString(1, f);
ps.setString(2, l);
ps.setString(3, g);
ps.setString(4, d);
ps.setString(5, p);
ps.setString(6, a);
ps.setString(7, h);
ps.setString(8, s);
ps.setString(9, i);
ps.setString(10, y);
ps.setString(11, yp);
ps.setString(12, pm);
ps.setString(13, zp);
ps.setString(14, al);
ps.setString(15, ge);
ps.setString(16, de);
ps.setString(17, rk);
ps.setBytes(18, pi);
ps.setString(19, fi);
ps.executeUpdate();
JOptionPane.showMessageDialog(null, "Data Updated Successfully", "Data Updated", JOptionPane.INFORMATION_MESSAGE);
dispose();
new view().setVisible(true);
} catch (Exception e) {
JOptionPane.showMessageDialog(null, "Error:" + e);
}
}
}
}
请注意,导致空指针异常的最后一条记录的变量是 rk。这是根据最后一个记录为变量 zp 计算得出的。希望我的问题很清楚。提前致谢。
【问题讨论】:
-
如果你使用“fn=”,为什么还要使用“where mn = '”+xyz+“''?”
-
我没有使用 fn,我正在根据主键“mn”的值更新“fn”。谢谢。
-
好的,让我这样说。为什么要使用安全的正确方法为 fn 使用准备好的语句分配变量,并使用不安全且易受 sql 注入的方式为 mn 连接字符串? :-)
-
请提出更好的方法。谢谢。
-
更新学生 SET fn=?,ln=?,gn=?,dp=?,pn=?,ad=?,mt=?,ph=?,ch=?,zo=? ,pp=?,pc=?,pz=?,tt=?,av=?,gd=?,re=?,pic=?,fil=?哪里 mn=?