我在这里搜索找到我的错误的解决方案,但没有人匹配我的问题,所以是否有人帮我在我的代码中找到错误!?
textField_1.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
try{
Object selected = list_1.getSelectedValue();
Connection conn = null;
conn=DriverManager.getConnection("jdbc:mysql://localhost/flyer","root","000");
Statement st= conn.createStatement();
String query = "INSERT INTO flyer_item (discount) SELECT price*? FROM `item` where item_name='?' ";
// PreparedStatement ps = null;
int i = Integer.valueOf((textField_1.getText()));
i=i/100;
java.sql.PreparedStatement ps = conn.prepareStatement(query);
ps.setInt(1,i);
ps.setString(2, selected.toString());
ps.executeUpdate();
st.executeUpdate(query);
} catch (SQLException se){
System.out.println(se.getMessage());
}
} } );
注意:mysql语句在工作台中成功运行。 谢谢
答案 0 :(得分:1)
删除问号占位符周围的单引号
改变这个:
where item_name='?'
对此:
where item_name= ?
这应解决问题。
使用单引号,prepareStatement将单引号视为包含字符串文字。字符串文字恰好包含一个问号,但它没有将该问号视为绑定占位符。
因此,生成的预处理语句只有一个占位符。这就是setString
调用遇到错误的原因:没有第二个占位符为其提供值。
-
修改强>
同样从代码中删除此行:
st.executeUpdate(query);
并删除此行:
Statement st= conn.createStatement();
(代码正在创建并使用准备好的声明 ps
。)
答案 1 :(得分:0)
从第二个参数中删除引号。在报价内?被视为文字,而不是参数。
String query = "INSERT INTO flyer_item (discount) SELECT price*? FROM `item` where item_name=?";
类型转换将自动处理..