首页 > 解决方案 > 在 Java 中使用准备好的语句更改语句

问题描述

我创建了使用语句插入数据库的方法。我必须用准备好的声明来改变它。我已阅读文档,但我不明白。

这是我写的代码:

public void ajouterEntreprise(Entreprise e) {

    Statement stm;
    try {
        stm = cnx.createStatement();

        String query = "INSERT INTO `user`(`nom`,  `email`, `password`, `tel`,`role`,`offre`) VALUES ('" + e.getNom() + "','" + e.getEmail() + "','" + e.getPassword() + "','" + e.getTel() + " ', " + e.getRole().getId() + ",'" + e.getOffre() + "')";

        stm.executeUpdate(query);
    } catch (SQLException ex) {
        Logger.getLogger(ServiceEntreprise.class.getName()).log(Level.SEVERE, null, ex);
    }

}

标签: javasqljdbc

解决方案


您当前的代码不安全,因为您将值连接到查询字符串中。这使您的代码容易受到 SQL 注入的攻击。为了解决这个问题,您需要切换到准备好的语句,在语句文本中使用参数占位符,然后在执行前设置语句的值。

使用准备好的语句的一个例子是(为简洁起见省略了一些列):

try (PreparedStatement pstmt = cnx.prepareStatement(
        "INSERT INTO `user`(`nom`, `email`, ...) values (?, ?, ...)")) {
    pstmt.setString(1, e.getNom());
    pstmt.setString(2, e.getEmail());
    // ...

    pstmt.executeUpdate();
}

推荐阅读