我有以下字符串,其中包含我要执行的查询:
query = "UPDATE inventario"
+ " set descripcion = '" + descripcion + "',"
+ " set bodega = '" + bodega + "'"
+ " where codigo = " + codigo;
我收到Update语句语法错误,但我没看到错误在哪里。任何帮助表示赞赏。 列“descripcion”和“bodega”是文本类型列。
答案 0 :(得分:8)
好吧,这可能是因为你有多个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);
使用准备好的陈述有三个直接的好处:
答案 1 :(得分:2)
删除查询中的额外SET
。
query = "UPDATE inventario"
+ " set descripcion = '" + descripcion + "',"
+ " bodega = '" + bodega + "'"
+ " where codigo = " + codigo;
但该查询易受SQL Injection
攻击。请参数化您的查询。
例如,
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();
答案 2 :(得分:1)
SET
关键字只需要一次。正在更新的多个列应使用逗号分隔,如下面的语句所示。
query = "UPDATE inventario"
+ " set descripcion = '" + descripcion + "',"
+ " bodega = '" + bodega + "'"
+ " where codigo = " + codigo;
BTW,强烈建议您使用PreparedStatement
进行此类操作,而不是像这样形成查询以避免SQL Injection攻击。
query = "UPDATE inventario"
+ " set descripcion = ?, bodega = ? "
+ " where codigo = ?";
PreparedStatement ps = connection.prepareStatement(query);
ps.setString(1, descripcion);
ps.setString(2, bodega);
ps.setInt(3, codigo);
int updateCount = ps.executeUpdate();