2014-01-25 69 views
0

是否可以在更新查询中插入字段? 我需要它,因为在更新之前,我需要做一些控制。 p.s我知道我必须使用准备好的声明,但我想知道这个错误,我想这是一个缺少的报价,我看不到。 错误:更新语法错误

int rs = st.executeUpdate("UPDATE shop SET quantity='" 
         + Quantity 
         + "' from warehouse,product where 
         warehouse.idProduct=shop.idProduct and 
         warehouse.idProduct=product.id and product.brand='" 
         + Brand + "' and product.productType='" + Product 
         + "'"); 
+0

如果你知道你应该使用准备好的声明,为什么你不这样做?在准备好的声明中,您无论如何都不会收到所有这些引用,因此问题可能会消失。请注意,你给我们的代码不是有效的Java ... –

+0

我以为我可以把一个查询更新,我错了,无论如何,我意识到准备好的语句更容易编写和更多的保护 – OiRc

回答

0

我想你想用一个连接的更新:

UPDATE shop s join 
     warehouse w 
     on w.idProduct = s.idProduct join 
     product p 
     on w.idProduct = p.id and 
      p.productType = '"+Product+"' and 
      p.brand = '" + Brand + "' 
    SET s.quantity = "+ Quantity 

作为一个说明。我猜Quantity是数字。如果是这样,你不需要引用价值。

1

这只是不是有效的SQL。 UPDATE语句不能有FROM子句。

Single-table syntax: 

UPDATE [LOW_PRIORITY] [IGNORE] table_reference 
    SET col_name1={expr1|DEFAULT} [, col_name2={expr2|DEFAULT}] ... 
    [WHERE where_condition] 
    [ORDER BY ...] 
    [LIMIT row_count] 

Multiple-table syntax: 

UPDATE [LOW_PRIORITY] [IGNORE] table_references 
    SET col_name1={expr1|DEFAULT} [, col_name2={expr2|DEFAULT}] ... 
    [WHERE where_condition] 
+0

如果我想在更新之前检查一下,我该怎么办? – OiRc

+0

做一个单独的'SELECT'语句,然后根据结果进行'UPDATE'。 –

+0

明白谢谢。 – OiRc