java - 在 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);
}
}
解决方案
您当前的代码不安全,因为您将值连接到查询字符串中。这使您的代码容易受到 SQL 注入的攻击。为了解决这个问题,您需要切换到准备好的语句,在语句文本中使用参数占位符,然后在执行前设置语句的值。
使用准备好的语句的一个例子是(为简洁起见省略了一些列):
try (PreparedStatement pstmt = cnx.prepareStatement(
"INSERT INTO `user`(`nom`, `email`, ...) values (?, ?, ...)")) {
pstmt.setString(1, e.getNom());
pstmt.setString(2, e.getEmail());
// ...
pstmt.executeUpdate();
}
推荐阅读
- pandas - 通过比较同一id的多行中的多列来过滤行
- c# - SpotifyAPI-NET 添加范围控制台应用程序 c#
- python - 如何删除文件python中的一定数量的字节
- go - 无法使用我自己的登录 golang 的功能打印日志信息
- python - 如何使图像/图像在pygame中消失?
- python - .kv 文件不会在 python 中加载
- sql - Postgres 递归 LTREE 查找
- python - Django URL 被调用两次并崩溃视图
- javascript - SAPUI5 - oModel.create 不是函数
- django - 如何将 djangoCMS 与现有的 django 项目集成