使用java.sql.Date

时间:2011-08-13 02:01:29

标签: java jdbc

我正在使用jdbc来调用sql查询“.... where mydate like '?%'” 我想将参数传递给查询:

PreparedStatement ps;  
ps.setDate(1, new java.sql.Date.valueOf("2000-01-13"));

但是这最后一行没有编译,我不知道为什么。当我直接在上面的查询中输入日期时,如“..其中mydate喜欢'2000-01-13%'”,它可以工作。

2 个答案:

答案 0 :(得分:5)

除了基本的编译错误(只需删除new),我发现了两个严重的问题:

  1. 鉴于LIKE有效,您的mydate字段显然属于varchar类型,而不是值得信赖的datedatetimetimestamp类型。这是问题的秘诀。您应始终使用正确的数据类型来获取该字段所包含的信息。

  2. %无法放在预备文件占位符?之后。必须直接在值中设置它。但是,这仅适用于String值(因此varchar字段类型)。对于值得信赖的datedatetimetimestamp类型,您宁愿使用=<>BETWEEN

  3. 有两种解决方案:

    1. 将字段的数据类型更改为真实datedatetimetimestamp,以便您可以使用正确的SQL语法,例如{{1} }。

    2. 改为使用WHERE mydate BETWEEN ? AND ?并删除占位符preparedStatement.setString(1, "2000-01-13%")周围的单引号,使其结束为?

    3. 另见:

答案 1 :(得分:1)

你想要使用:

java.sql.Date.valueOf("2000-01-13")

也就是说,不要在它前面使用new。通过使用new,您告诉编译器您要创建一个新对象。由于valueOf是静态方法,因此您无需创建对象即可调用它。

无论如何,它不编译的原因是因为new java.sql.Date.valueOf("str")不是有效的语句。如果你想创建一个new java.sql.Date()的新实例,你可以用括号说Date,但是你可以用不同的方法。