如果更改了用户数据格式,是否需要准备语句?
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 将生成一个填空执行计划,无需重新编译即可重复使用。这可以提高经常重复查询的性能,这是一件好事™。
我使用 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 将生成一个填空执行计划,无需重新编译即可重复使用。这可以提高经常重复查询的性能,这是一件好事™。