1

我想通过使用 PreparedStatement 使用 Java 应用程序更新 MySQL 数据库中的多列数据,但我不知道该怎么做。

以下是更新的代码查询:

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

2 回答 2

58

不,不,不,不!

不要通过连接字符串来构建 SQL 语句我以为我们很久以前就结束了。这是一种非常糟糕的做法,也是一种很好的方法来创建错误并在您的应用程序中留下巨大的安全漏洞。通过连接字符串来创建 SQL 语句是灾难的根源,也是一个需要在它生根之前消除的坏习惯。

使用准备好的语句- 从长远来看,它将为您节省很多痛苦。

例如,将您编写的内容与以下内容进行比较:

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 注入成为可能的讨厌的引用问题。

于 2012-08-19T09:51:53.897 回答
1

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

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

你也有错别字。qunatity应该是quantity

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

于 2012-08-19T09:46:34.453 回答