Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/facebook/9.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 MySQL PreparedStatement SELECT语句_Java_Prepared Statement - Fatal编程技术网

Java MySQL PreparedStatement SELECT语句

Java MySQL PreparedStatement SELECT语句,java,prepared-statement,Java,Prepared Statement,我有一个数据库和一个Java程序。我正在尝试编写一个代码,这样,如果在文本字段中输入了MockID,并且按下了submit按钮,那么根据输入的MockID的详细信息应该从数据库中检索并显示在文本区域中。下面是我编写的代码。经我修订后,守则现已生效。但是,在textarea中,它实际上并不显示给定模拟Id的记录中的相关信息,而是显示文本。 有人能给点建议吗 JButton button = new JButton("Submit"); button.addActionListene

我有一个数据库和一个Java程序。我正在尝试编写一个代码,这样,如果在文本字段中输入了MockID,并且按下了submit按钮,那么根据输入的MockID的详细信息应该从数据库中检索并显示在文本区域中。下面是我编写的代码。经我修订后,守则现已生效。但是,在textarea中,它实际上并不显示给定模拟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);

您的
PreparedStatement
只有一个变量,即
MockID

从mockexam中选择MockID、主题、年份、日期,其中MockID=?…所以下面的语句

                prest.setString(2, "Subject");
                prest.setString(3, "Year");
                prest.setString(4, "Date");
不需要

更新您的评论


我们对所有用“?”表示的变量执行
setString
…这里只有MockId是一个变量…如果需要,可以使用“select*”…检索整行,但仍然只有一个参数(用?)表示)到
PreparedStatement
,这就是你的
MockId
你的
PreparedStatement
只有一个变量,即
MockId

        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");
从mockexam中选择MockID、主题、年份、日期,其中MockID=?…所以下面的语句

                prest.setString(2, "Subject");
                prest.setString(3, "Year");
                prest.setString(4, "Date");
不需要

更新您的评论

我们对所有用“?”表示的变量执行
setString
,这里只有MockId是一个变量…..如果需要,您可以使用“select*”…检索整行,
PreparedStatement
仍然只有一个参数(由?)表示,这就是您的
MockId

        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、Subject、Year和Date硬编码到语句中,因此没有理由使用
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);
这就是问题所在。在sql字符串中,您为1个参数留出了空间(由
指示),但随后尝试设置4。所以你出界了。此外,由于您将MockID、Subject、Year和Date硬编码到语句中,因此没有理由使用
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);
对于列名,“日期”不是一个好的选择。这是我所知道的每个数据库中的保留字。它对用户来说也不是很有用。出生日期?死亡日期?订单日期?这是什么意思

我会先改为“考试日期”或其他什么,看看这是否有帮助。

对于列名来说,“日期”不是一个好的选择。这是我所知道的每个数据库中的保留字。它对用户来说也不是很有用。出生日期?死亡日期?订单日期?这是什么意思

String sql = "SELECT MockID, Subject, Year, Date FROM mockexam WHERE MockID =?";    
我会先改成“考试日期”或其他什么,看看这是否有帮助

String sql = "SELECT MockID, Subject, Year, Date FROM mockexam WHERE MockID =?";    
准备此语句时,您“说”您将为每个
给出一个值。 这里您只有一个,但稍后将定义其中的4个:

    PreparedStatement prest = con.prepareStatement(sql);
    prest.setString(1, "MockID");
    prest.setString(2, "Subject");
    prest.setString(3, "Year");
    prest.setString(4, "Date");
不要忘记关闭连接、语句和可能的结果集,以避免内存泄漏

准备此语句时,您“说”您将为每个
给出一个值。 这里您只有一个,但稍后将定义其中的4个:

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


不要忘记关闭连接、语句和可能的结果集,以避免内存泄漏。

?是绑定变量占位符。你只有一个。那么,为什么要绑定4个东西呢?

?是绑定变量占位符。你只有一个。那你为什么要绑定4个东西呢?

我希望模拟ID、主题、年份和日期在文本区域显示为结果。为什么我有MockID=?是因为应该为用户输入的特定MockID显示信息吗?是的,我知道…我们对所有由“?”表示的变量都进行设置字符串…这里只有MockID是一个变量…如果需要,可以使用“select*”…检索整行,但仍然只有一个参数(由“”表示)要准备报表,这是您的MockIdI希望Mock ID、主题、年份和日期显示为文本区域中的结果。为什么我有MockID=?是因为应该为用户输入的特定MockID显示信息吗?是的,我知道…我们对所有由“?”表示的变量都进行设置字符串…这里只有MockID是一个变量…如果需要,可以使用“select*”…检索整行,但仍然只有一个参数(由“”表示)要准备报表,这是您的MockIdI希望Mock ID、主题、年份和日期显示为文本区域中的结果。为什么我有MockID=?是因为应该为用户输入的特定MockID显示信息?例如:
String sql=“选择MockID,Subject,Year,datefrom mockexam,其中MockID=?”;PreparedStatement prest=con.prepareStatement(sql);预设置字符串(1,“1”)
将从数据库中选择
MockID、主题、年份和日期,以便输入
MockID=1
哦,我明白你的意思了。我将尝试修改代码,因为我明白你的意思:)我已将代码修改为prest.setString(1,mockId);。它现在部分工作,但它实际上并没有显示数据库中记录的相关数据,而是显示为文本:Mock ID、Subject、Year、Date。这是我对textarea的代码:textarea.append(“Mock ID,Subject,Year,Date”);这是因为您将字符串MockID Subject Year Date附加到文本区域,您必须从数据库中获取结果集,并从结果集中获取数据。我会加上密码给我一点时间我会的