为啥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更新查询不起作用?的主要内容,如果未能解决你的问题,请参考以下文章

为啥在火花中运行时配置单元查询不起作用

为啥单向@OneToMany 更新不起作用

为啥作曲家更新后php artisan命令不起作用

为啥我的适配器更新不起作用

为啥这个查询不起作用(EXISTS 的问题)

为啥我的简单不匹配查询不起作用?