我在从java更新表时遇到问题。
我需要检查colmunID(来自我的表PRODUCTS)= int id(由用户输入给出)并将表中的产品价格更改为用户给出的价格。
问题:
static void x(int Userid, int Userprice) {
..........................................
String sql = "UPDATE Product set Price = Userprice where ID=Userid; ";
....}
我收到的错误是我的数据库中没有Userprice或Userid列。我不知道怎么写这个来检查int这个方法中作为参数给出的用户ID而不是我的数据库表中不存在的列。
答案 0 :(得分:1)
假设您在DB中同时拥有Integer
数据类型的列,
String sql = "UPDATE Product set Price="+Userprice+" where ID="+Userid;
您没有将实际值传递给它和额外的';'不需要。另外,我建议你更喜欢准备好的陈述,而不是上面的方法
答案 1 :(得分:1)
虽然你肯定在生产代码中想要使用预处理语句来阻止sql注入,但下面会有一个简单的解决方法。
String sql = String.format("UPDATE Product set Price = %d where ID=%d ",Userprice,Userid);
String不会自己评估变量。
答案 2 :(得分:0)
如果数据库中不存在Userid表,则无法在SQL查询中使用此表。有两种选择: 1.将Userid和Userprice作为变量传递给SQL查询
String sql = "UPDATE Product set Price = " + Userprice + "where ID=" + Userid+ "; "
或者 2.在数据库中创建表并加入
String sql = "Update A Set A.Price = b.Userprice FROM Product as A INNER JOIN User as b on A.Userid = b.ID;"
答案 3 :(得分:0)
PreparedStatement ps = null;
Connection con = null;
try {
con = getConnection();
String sql = "UPDATE Product set Price = ? where ID= ? ";
ps = con.prepareStatement(sql);
ps.setString(1, Userprice);
ps.setString(2, Userid);
int i = ps.executeUpdate();
if (i > 0) {
System.out.println("Product Updated");
} else {
System.out.println("Error Occured");
}
我认为这是您正在寻找的东西......查询不应包含';'在代码的字符串中