Java 包含正斜杠字符的web jsp表单中的mySQL插入问题

Java 包含正斜杠字符的web jsp表单中的mySQL插入问题,java,mysql,jsp,Java,Mysql,Jsp,我有一个jsp表单,用户可以在其中包含以下字符串,例如: 这是一个测试/ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { description = request.getParameter("description "); String mysqlQuery= "insert into data va

我有一个jsp表单,用户可以在其中包含以下字符串,例如:

这是一个测试/

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

 description = request.getParameter("description ");
 String mysqlQuery= "insert into data values (default,'" + description + "');";
 int Res = St.executeUpdate(mysqlQuery);    
 ...
 }
问题就在这里。当我检查mySQL表数据时,我发现description列缺少/:

这是一个测试

为了解决这个问题,我尝试使用String.replaceAll方法,但是这个方法既不喜欢“/”也不喜欢“\”,编译器会出错。有没有更好的方法来解决这个问题?

嗯, 你能试试这个吗

preparedStatement = connection.prepareStatement("INSERT INTO data (default, description, .., ....) VALUES (?, ?, ?, ?)");
preparedStatement.setInt(1,0);
preparedStatement.setString(2, data.getDescription());
preparedStatement.setTimestamp(3, ...);
.....

preparedStatement.executeUpdate();
注: 准备报表的优点

  • SQL语句的预编译和数据库端缓存导致 总体而言,执行速度更快并且能够重用相同的SQL 语句的批处理

  • 通过的内置转义自动防止SQL注入攻击 引号和其他特殊字符。请注意,这要求您 使用任何PreparedStatement setXxx()方法设置值

  • PreparedStatement是防止SQL注入攻击的一种非常好的防御(但不是万无一失的)

谢谢

使用事先准备好的陈述。您的代码是一个巨大的攻击邀请。您是否检查了description的值是否不为null?这起作用,但需要更改默认关键字的代码。谢谢。