Java Update语句语法错误

Java Update语句语法错误,java,sql,jsp,Java,Sql,Jsp,我有以下字符串,其中包含我要执行的查询: query = "UPDATE inventario" + " set descripcion = '" + descripcion + "'," + " set bodega = '" + bodega + "'" + " where codigo = " + codigo; 我得到一个Update语句语法错误,但我不知道错误在哪里。感谢您的帮助。 “Description”和“bodega”列是文本类型的列。

我有以下字符串,其中包含我要执行的查询:

     query = "UPDATE inventario"
     + " set descripcion = '" + descripcion + "',"
     + " set bodega = '" + bodega + "'"
     + " where codigo = " + codigo;
我得到一个Update语句语法错误,但我不知道错误在哪里。感谢您的帮助。
“Description”和“bodega”列是文本类型的列。

SET
关键字只需要一次。正在更新的多个列应该用逗号分隔,如下面的语句所示

query = "UPDATE inventario"
    + " set descripcion = '" + descripcion + "',"
    + "     bodega = '" + bodega + "'"
    + " where codigo = " + codigo;
顺便说一句,强烈建议用于此类操作,而不是像这样形成查询,以避免攻击


删除查询中的额外
SET

query = "UPDATE inventario"
 + " set descripcion = '" + descripcion + "',"
 + "     bodega = '" + bodega + "'"
 + " where codigo = " + codigo;
但是使用
SQL注入
时,该查询易受攻击。请参数化您的查询。 例如


这可能是因为您有多个
set
部分,而不是使用逗号分隔,并且可能是因为
codigo
值周围没有引号(如果这是另一个字符串)。。。但我强烈建议您无论如何不要创建这样的SQL,在SQL中直接使用值

相反,请使用准备好的语句:

String sql = "UPDATE inventario set descripcion=?, bodega=? where codigo=?";
PreparedStatement st = conn.prepareStatement(sql);
st.setString(1, descripcion);
st.setString(2, bodega);
st.setString(3, codigo);
使用准备好的报表有三个直接好处:

  • 它避免了(想想如果你的描述中有引用会发生什么)
  • 它将代码(SQL)与数据(值)分离
  • 这意味着您可以避免对datetime之类的类型进行转换,因为通过字符串表示是一个巨大的潜在错误源

您能回显已解释的查询吗?基本上
System.out.println(查询)分配所有变量后;请考虑使用准备好的语句。这个查询让我很痒。哦,CRAP没有赶上额外的设置。谢谢你的指点。是的,关于sql注入,您是对的,我将使用线程中另一个人指出的准备好的语句。谢谢大家。
String query = "UPDATE inventario" + 
               "   set descripcion = ?, bodega = ? " + 
               " where codigo = ?";
PreparedStatement prep = connection.prepareStatement(query);
prep.setString(1, descripcion);
prep.setString(2, bodega);
prep.setInt(3, codigo);
prep.executeUpdate();
String sql = "UPDATE inventario set descripcion=?, bodega=? where codigo=?";
PreparedStatement st = conn.prepareStatement(sql);
st.setString(1, descripcion);
st.setString(2, bodega);
st.setString(3, codigo);