Fat*_*urk 2 java sql prepared-statement
我有以下代码来更新记录.但是,代码会编译,它会跳过try语句中的所有内容,并在catch语句中显示错误消息.我不知道我错过了什么,因为它没有显示任何类型的语法错误.
try {
PreparedStatement st = db.con.prepareStatement("UPDATE item SET Name = ?, Size = ?, Price = ?, WHERE ItemCode = ?");
st.setString(1, textArea_Code.getText());
st.setString(2, textArea_name.getText());
st.setString(3, textArea_size.getText());
st.setString(4, textArea_price.getText());
st.executeUpdate();
JOptionPane.showMessageDialog(frame, "Updated");
} catch (SQLException e ) {
JOptionPane.showMessageDialog(frame, "update not successful");
}
Run Code Online (Sandbox Code Playgroud)
Ant*_*ist 11
你吞下这个例外,这通常是一个坏主意.至少调用,e.printStackTrace()以便您获得异常的输出.
碰巧,您的SQL语句中存在语法错误:UPDATE item SET Name = ?, Size = ?, Price = ?, WHERE ItemCode = ?- 从之后删除逗号Price = ?.
为了解决为什么UPDATE语句仍然不起作用的困惑,尽管修复了语法错误,请允许我更详细地解释(在答案中更容易做到这一点,而不是在评论中).
?SQL字符串中的字符是一个占位符,表示您将使用各种set_()方法之一设置的值(在您的情况下,仅限于此setString().每个占位符都使用从1开始的索引进行编号 - ?字符串中显示的第一个占位符代表索引1,第二个表示索引2等.
您的SQL字符串如下所示:
UPDATE item SET Name = ?, // 1
Size = ?, // 2
Price = ? // 3
WHERE ItemCode = ? // 4
Run Code Online (Sandbox Code Playgroud)
您正在为占位符设置值,如下所示:
st.setString(1, textArea_Code.getText()); // ItemCode is fourth in the SQL, should be 4
st.setString(2, textArea_name.getText()); // Name is first in the SQL, should be 1
st.setString(3, textArea_size.getText()); // Size is second in the SQL, should be 2
st.setString(4, textArea_price.getText()); // Price is third in the SQL, should be 3
Run Code Online (Sandbox Code Playgroud)