如何使用Java中的PreparedStatement更新多个列 - JDBC

时间:2012-08-19 09:44:30

标签: java mysql jdbc

我想通过使用PreparedStatement使用Java应用程序更新MySQL数据库中的多列数据,但我无法弄清楚如何做到这一点。

以下是更新的代码查询:

String s = "UPDATE items SET name =" + u.getName() + ",category="
                + u.getCategory() + ", price=" + u.getPrice()
                + "   ,qunatity=" + u.getQuantity() + " WHERE id = '"
                + u.getId() + "'; ";

2 个答案:

答案 0 :(得分:54)

不,不,不,不!

NOT 通过连接字符串来构建SQL语句。我以为我们很久以前就已经结束了。这是非常错误的做法和非常创建错误并让巨大的安全漏洞进入您的应用程序的好方法。通过连接字符串来创建SQL语句是灾难的一种方法,也是一种需要在它占用之前被杀掉的坏习惯。

Use prepared statements - 从长远来看,它会为你节省很多痛苦。

例如,将您所写的内容与此进行比较:

PreparedStatement update = connection.prepareStatement
    ("UPDATE items SET name = ?, category = ?, price = ?, quantity = ? WHERE id = ?");

update.setString(1, u.getName());
update.setString(2, u.getCategory());
...
update.setInt(5, u.getId());

update.executeUpdate();

当然,它稍微冗长一点,但更具可读性且更不容易出错 - 更不用说JDBC会处理那些让SQL injection成为可能的引用问题。

答案 1 :(得分:2)

您缺少字符串值周围的引号。

SET name = '" + u.getName() + "', ...
           ^                   ^

你也有错字。 qunatity应该是quantity

我还建议您查看参数化查询。您当前的代码存在SQL注入的风险。