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