我正在使用jdbc来调用sql查询“.... where mydate like '?%'
”
我想将参数传递给查询:
PreparedStatement ps;
ps.setDate(1, new java.sql.Date.valueOf("2000-01-13"));
但是这最后一行没有编译,我不知道为什么。当我直接在上面的查询中输入日期时,如“..其中mydate喜欢'2000-01-13%'”,它可以工作。
答案 0 :(得分:5)
除了基本的编译错误(只需删除new
),我发现了两个严重的问题:
鉴于LIKE
有效,您的mydate
字段显然属于varchar
类型,而不是值得信赖的date
,datetime
或timestamp
类型。这是问题的秘诀。您应始终使用正确的数据类型来获取该字段所包含的信息。
%
无法放在预备文件占位符?
之后。必须直接在值中设置它。但是,这仅适用于String
值(因此varchar
字段类型)。对于值得信赖的date
,datetime
和timestamp
类型,您宁愿使用=
,<
,>
或BETWEEN
有两种解决方案:
将字段的数据类型更改为真实date
,datetime
或timestamp
,以便您可以使用正确的SQL语法,例如{{1} }。
改为使用WHERE mydate BETWEEN ? AND ?
并删除占位符preparedStatement.setString(1, "2000-01-13%")
周围的单引号,使其结束为?
。
答案 1 :(得分:1)
你想要使用:
java.sql.Date.valueOf("2000-01-13")
也就是说,不要在它前面使用new
。通过使用new
,您告诉编译器您要创建一个新对象。由于valueOf
是静态方法,因此您无需创建对象即可调用它。
无论如何,它不编译的原因是因为new java.sql.Date.valueOf("str")
不是有效的语句。如果你想创建一个new java.sql.Date()
的新实例,你可以用括号说Date
,但是你可以用不同的方法。