如果更改了用户数据格式,是否需要准备语句?

Prepared statement needed if the user data format was changed?

我使用 JCalendarChooser,用户数据采用 d MMMM yyyy 格式。示例输出为 4 November 2015。在我从数据库 SELECT 之前,我将其更改为 yyyy-MM-dd 格式。这是我之前的代码 SELECT:

                String date1 = null;

                java.util.Date d1 = jDateChooser1.getDate();
                if (d1 == null) {
                    System.out.println("No date specified!");
                } else {
                    DateFormat fmt = new SimpleDateFormat("yyyy-MM-dd");
                    date1 = fmt.format(d1); //jdatechooser
                    // Then select from db
                }

我对用户验证的理解是您需要清理用户的所有输入,但如果数据格式已更改怎么办?在上面的这种情况下,我需要使用准备好的语句吗?

提前致谢

如果除了通过 jDateChooser 和 SimpleDateFormat 传递(并由其验证)之外,没有其他方法可以让用户输入到查询 ,那么您的输入是充分消毒。

也就是说,在动态 SQL 字符串上使用 PreparedStatement 还有其他原因。如果您 运行 同一查询多次使用不同的日期,那么由此产生的每个动态 SQL 字符串将被 dbms 视为要编译的 new 查询从头开始,而 PreparedStatement 将生成一个填空执行计划,无需重新编译即可重复使用。这可以提高经常重复查询的性能,这是一件好事™。