为啥java更新查询不起作用?
Posted
技术标签:
【中文标题】为啥java更新查询不起作用?【英文标题】:why java updating query is not working?为什么java更新查询不起作用? 【发布时间】:2014-02-21 10:45:17 【问题描述】:我正在使用 MS Access 数据库,我完成了插入和删除查询,这些查询运行良好,但为什么更新查询不起作用请帮忙?
插入代码:
try
ps=oon.prepareStatement("insert into Student(Studentid,Studentname,Age,Contactno, Degreeprogram)values(?,?,?,?,?)");
ps.setString(1,jTextField1.getText());
ps.setString(2,jTextField2.getText());
ps.setString(3,jTextField3.getText());
ps.setString(4,jTextField4.getText());
ps.setString(5,jComboBox1.getSelectedItem().toString());
JOptionPane.showMessageDialog(null, "Inserted");
ps.executeQuery();
catch(Exception ex)
并删除:
try
ps=oon.prepareStatement("DELETE from Student WHERE Studentid=?");
ps.setString(1, jTextField5.getText());
JOptionPane.showMessageDialog(null, "Deleted");
ps.executeQuery();
catch(Exception ex)
更新代码(来自评论):
try
ps=oon.prepareStatement("UPDATE Student set Studentid=?,Studentname=?,age=?,Contactno=?,Degreeprogram=? WHERE Studentid="+Integer.parseInt(jTextField1.getText()));
ps.setString(2, jTextField2.getText());
ps.setString(3, jTextField3.getText());
ps.setString(4, jTextField4.getText());
JOptionPane.showMessageDialog(null, "Update"); ps.executeQuery();
// TODO add your handling code here:
【问题讨论】:
你正在扔掉你的Exception ex
。不要那样做,if规范很可能在那里。你为什么要抓住完整的Exception
?总是抓住一个子类。
我正在 jframe 上进行这些编码。插入和删除按钮上的这些查询但更新查询不起作用?
这是更新代码,但不工作 try ps=oon.prepareStatement("UPDATE Student set Studentid=?,Studentname=?,age=?,Contactno=?,Degreeprogram=? WHERE Studentid= "+Integer.parseInt(jTextField1.getText())); ps.setString(2, jTextField2.getText()); ps.setString(3, jTextField3.getText()); ps.setString(4, jTextField4.getText()); JOptionPane.showMessageDialog(null, "更新"); ps.executeQuery(); // TODO 在此处添加您的处理代码:
因此,您的更新查询无法正常工作。您向我们展示的是插入和删除查询,它们工作正常。所以我们必须猜测你的更新查询是做什么的以及问题是什么。
ps.setString(2):你不认为第一个参数也必须定义吗?还有第五个?你为什么不阅读你得到的异常的堆栈跟踪?它会告诉你的。
【参考方案1】:
您没有设置参数 1 和 5,因此很可能是在抱怨未设置参数 1 和/或 5。你不应该像你正在做的那样吞下异常,你应该让异常冒泡/传播到可以处理异常的层,或者如果应用程序不能(或不想)至少打印或记录异常采取纠正措施。
另外,我强烈建议您将 WHERE 子句 WHERE Studentid="+Integer.parseInt(jTextField1.getText())
替换为 WHERE Studentid=?
并添加 ps.setInt(6, Integer.parseInt(jTextField1.getText()))
。
【讨论】:
实际上,他/她甚至应该让异常传播,或者将其包装到另一个中并抛出它。失败的更新语句通常不应让程序继续运行,就好像一切正常。 @JBNizet 同意,但是看着代码我觉得这可能是一个简单的学生作业,我不想让它过于复杂。我修改了答案。以上是关于为啥java更新查询不起作用?的主要内容,如果未能解决你的问题,请参考以下文章