Java MySQL PreparedStatement SELECT 语句

标签 java prepared-statement

<分区>

我有一个数据库和一个 Java 程序。我正在尝试编写代码,以便如果在文本字段中输入 MockID 并按下提交按钮,则应从数据库中检索根据输入的 Mock ID 的详细信息并显示在文本区域中。下面是我写的代码。在我进行修改后,代码现在可以工作了。但是,在文本区域中,它实际上并没有显示来自给定 Mock Id 的记录的相关信息,而只是显示文本。 有人可以建议吗?

    JButton button = new JButton("Submit");
    button.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent arg0) {


        String mockId = textField.getText();    

        try {

            String sql = "SELECT MockID, Subject, Year, Date FROM mockexam WHERE MockID =?";    

            PreparedStatement prest = con.prepareStatement(sql);
            prest.setString(1, mockId);

            prest.executeQuery();
            textArea.append("MockID, Subject, Year, Date");
            JOptionPane.showMessageDialog(frmFindMock, "Record has been updated.");


        }

        catch (SQLException e) {
        //System.out.println("Record couldn't be added!");
        e.printStackTrace();
        JOptionPane.showMessageDialog(frmFindMock, "Record couldn't be updated. Please try again.");
        }
        }

        });

    button.setBounds(303, 60, 75, 23);
    panel_1.add(button);

最佳答案

        String sql = "SELECT MockID, Subject, Year, Date FROM mockexam WHERE MockID =?";    

        PreparedStatement prest = con.prepareStatement(sql);
        prest.setString(1, "MockID");
        prest.setString(2, "Subject");
        prest.setString(3, "Year");
        prest.setString(4, "Date");

这就是问题所在。在您的 sql 字符串中,您为 1 个参数(由 ? 表示)留出了空间,但随后您尝试设置 4。因此您超出了范围。此外,由于您将 MockID、主题、年份和日期硬编码到语句中,因此没有理由使用 setString 来尝试(错误地)设置它们。

要显示您的答案,请执行以下操作:

ResultSet rs = prest.executeQuery();
String result;
while(rs.next()) {
    String id = rs.getString("MockID");
    String subject = rs.getString("Subject");
    String year = rs.getString("Year");
    String Date = rs.getString("Date");
    result += id + ", " + subject + ", " + year + ", " + date + "\n";
}
textarea.append(result);

关于Java MySQL PreparedStatement SELECT 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9621428/

相关文章:

php - 当 mysqli 和 PDO 不可用时可以准备语句吗?

MySQL 准备语句表 3

带有 Spring 参数的 Java Akka Actors

java - Android - onKeyDown 不适用于 KEYCODE_MENU

使用 String.format 的 Java 十进制格式?

java - 将 byte[] 设置为 SQL 准备语句

java - 如何编写接收 ASCII 码并显示其字符的程序?

java - 当 Activity 被破坏时保存切换按钮的值,并在 Activity 再次启动时将它们放回原处

java - 空连接变量

c# - 准备好的语句中出现错误(INSERT INTO 在无效变量上停止,我想将其替换为 NULL)