【问题标题】:How can I delete or update a record sql from JTable in Java Swing如何在 Java Swing 中从 JTable 中删除或更新记录 sql
【发布时间】:2019-11-01 17:15:11
【问题描述】:

我正在编写一个 java Swing sql 项目。我一直在删除和更新信息记录。我可以正常添加新记录,但无法更新或删除记录。当我删除时,它会通知“找不到列号”。这是我的代码和错误消息的图片。提前致谢。

private void JtbDeleteActionPerformed(java.awt.event.ActionEvent evt) {                                          
  int row = jtbStudent.getSelectedRow();
    String cell = jtbStudent.getModel().getValueAt(row, 0).toString();
    try {
        stm = cnn.createStatement();
        if (JOptionPane.showConfirmDialog(null, "Are you sure?", "WARNING",
    JOptionPane.YES_NO_OPTION) == JOptionPane.YES_OPTION) {
        stm.execute("DELETE FROM Student where RollNo = " + cell);
        loadTable();
        JOptionPane.showMessageDialog(null, "Delete Successfully");
    } else {
        JOptionPane.showMessageDialog(null, "Delete Unsuccesfully!");
    }

    } catch (Exception e) {
        JOptionPane.showMessageDialog(null, e);
    }
    finally{
        try {
            stm.close();
            rs.close();
        } catch (Exception e) {
        }
    }
}      

更新按钮

 private void jbtUpdateActionPerformed(java.awt.event.ActionEvent evt) {       
  try {
        int row = jtbStudent.getSelectedRow();
        String cell = jtbStudent.getModel().getValueAt(row, 0).toString();
        stm = cnn.createStatement();
        String value1 = jtxName.getText();
        String value2 = jtxMark.getText();
        String sql="UPDATE Student set Name='"+value1+"' ,mark='"+value2+"' 
,where RollNo = '" + cell + "'";
        stm.execute(sql);
        System.out.println("Update success!");
        loadTable();
    } catch (Exception e) {
        JOptionPane.showMessageDialog(null, e);
    }

【问题讨论】:

  • 请勿发布代码、数据、错误消息等的图片 - 将文本复制或输入到问题中。请保留将图像用于图表或演示渲染错误,这些无法通过文本准确描述的事情。阅读How do I ask a good question主题了解更多信息。
  • 请删除截图。它显示个人信息(包括与人有关的标记)。

标签: java sql swing jdbc jtable


【解决方案1】:

您正在使用无效的 SQL 语句。您正在编写(并发送到数据库)的行是DELETE FROM Student where RollNo = A02

您所期望的(在有效 SQL 中)将是:DELETE FROM Student where RollNo = 'A02'

现在为简单起见,您可以使用

stm.execute("DELETE FROM Student where RollNo = '" + cell + "'");

但这会对 SQL 注入开放,这意味着如果变量 cell 中的字符串可以读取类似 "'; drop table student;" 的内容,您的数据库将删除学生表。

最好使用准备好的语句(https://docs.oracle.com/javase/7/docs/api/java/sql/PreparedStatement.html):

PreparedStatement stm = cnn.prepareStatement("DELETE FROM Student where RollNo = ?");
stm.setString(1, cell);
boolean result = stm.execute();

这样,String 被正确转义。详细请参考jdbc的文档。

PreparedStatement - https://docs.oracle.com/javase/7/docs/api/java/sql/PreparedStatement.html 连接 - https://docs.oracle.com/javase/7/docs/api/java/sql/Connection.html#prepareStatement(java.lang.String)

【讨论】:

  • 从 ',where' 中删除 ','。也就是说,您确实需要学习调试代码。这个页面应该回答问题而不是解决错误。
猜你喜欢
  • 1970-01-01
  • 2016-04-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-19
  • 2012-06-04
相关资源
最近更新 更多