Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 无法基于搜索生成更新的JTable_Java_Mysql_Swing_Jtable_Awt - Fatal编程技术网

Java 无法基于搜索生成更新的JTable

Java 无法基于搜索生成更新的JTable,java,mysql,swing,jtable,awt,Java,Mysql,Swing,Jtable,Awt,当我在搜索按钮中输入一个人的名字时,我发现很难更新JTable。程序正确编译,没有任何错误,但在SearchActionPerformed事件中,当按下搜索按钮时,出现一个空表。在没有搜索的情况下,表中充满了来自数据库的值。在搜索条件中,我键入的姓氏与数据库中的姓氏完全相同,但没有返回 public class MainMenu extends javax.swing.JFrame { Academic ac = new Academic(); Connection conn

当我在搜索按钮中输入一个人的名字时,我发现很难更新
JTable
。程序正确编译,没有任何错误,但在
SearchActionPerformed
事件中,当按下搜索按钮时,出现一个空表。在没有搜索的情况下,表中充满了来自数据库的值。在搜索条件中,我键入的姓氏与数据库中的姓氏完全相同,但没有返回

public class MainMenu extends javax.swing.JFrame {

    Academic ac = new Academic();
    Connection conn = JavaConnect.ConnectDB();
    PreparedStatement pst = null;
    String sql;
    ResultSet rs = null;
    ImageIcon format = null;
    public byte[] imagedata = null;

    /**
     * Creates new form MainMenu
     */
    public MainMenu() {
        initComponents();
    }

    public void Update_table(String sql) {
        try {
            // String sqlStatement =
            // "SELECT Title, Forename, Surname, Role FROM AcademicInfo ";
            pst = conn.prepareStatement(sql);
            rs = pst.executeQuery();
            table_academic.setModel(DbUtils.resultSetToTableModel(rs));
        } catch (Exception e) {
            JOptionPane.showMessageDialog(null, e);
        }

        finally {
            try {
                rs.close();
                pst.close();
            } catch (Exception e) {
            }

        }

    }// end method

    private void table_academicMouseClicked(java.awt.event.MouseEvent evt) {
        try {
            int row = table_academic.getSelectedRow();
            String table_click0 = (table_academic.getModel().getValueAt(row, 1)
                    .toString());
            String table_click1 = (table_academic.getModel().getValueAt(row, 2)
                    .toString());
            String sqlSt = "SELECT * FROM AcademicInfo WHERE Forename='"
                    + table_click0 + "' AND Surname='" + table_click1 + "'";
            Connection conn2 = JavaConnect.ConnectDB();
            pst = conn2.prepareStatement(sqlSt);
            rs = pst.executeQuery();

            if (rs.next()) {
                label_name.setText("" + rs.getString(2) + " " + rs.getString(3)
                        + " " + rs.getString(4));
                label_role.setText("" + rs.getString(5));
                label_room.setText("Room:   " + rs.getString(6));
                jLabel14.setText("Page:   " + rs.getString(7));
                label_hours.setText("Hours:   " + rs.getString(8));
                label_phone.setText("Phone:   " + rs.getString(9));
                label_mobile.setText("Mobile:   " + rs.getString(10));
                label_email.setText("Email:   " + rs.getString(11));
                imagedata = (rs.getBytes(12));
                format = new ImageIcon(imagedata);
                label_image.setIcon(format);

            }
        }

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

    private void SearchActionPerformed(java.awt.event.ActionEvent evt) {
        try {
            String sql = "SELECT Title, Forename, Surname, Role FROM AcademicInfo WHERE Surname=?";
            PreparedStatement pst1 = conn.prepareStatement(sql);
            pst1.setString(1, search_txt.getText());
            ResultSet rs2 = pst1.executeQuery();
            if (rs2.next()) {

                JOptionPane.showMessageDialog(null, "Found Academic");
                Update_table(sql);
            } else {
                JOptionPane.showMessageDialog(null, "No Results Found");
            }
        } catch (Exception e) {
            JOptionPane.showMessageDialog(null, e);
        }
    }
}

检查此方法是否适用于您:@Chandana我不希望对代码进行太多修改,而是尝试重用现有的
Update\u table()
method设置新模型将更新表,因此您的问题在于构建新模型。我建议执行以下操作以验证查询是否符合预期:(1)记录传递到查询构建代码中的参数,(2)在处理结果集时记录每一行,以及(3)创建一个只使用已知参数执行查询的自包含测试程序,这并不涉及Swing。作为一般性的评论:我将假设这只是一个学习练习,而不是用于生产。但是,(1)使用
SwingWorker
而不是直接从Swing事件线程执行查询(因为后者会锁定GUI)仍然是一个好习惯,(2)使用
PreparedStatement
而不是带有文字查询词的
语句
(因为后者会让您面临SQL注入攻击)@parsifal我不明白你所说的日志是什么意思,你能用一个例子解释一下吗?我尝试了一个测试,当我在SQL语句中指定姓氏而不是?时,它可以正常工作。因此,实际上它可以将SQL值传递给update_table()。可能是由于连接被打开而造成的混乱。我不敢肯定