我正在使用jdbc来调用sql查询" .... where mydate like '?%'",我想将参数传递给查询:
PreparedStatement ps;
ps.setDate(1, new java.sql.Date.valueOf("2000-01-13"));
Run Code Online (Sandbox Code Playgroud)
但最后一行不是编译,我不知道为什么.当我直接在上面的查询中输入日期时,如"..其中mydate喜欢'2000-01-13%'",它的工作原理.
除了基本的编译错误(只是删除new),我发现了两个严重的问题:
鉴于这样的事实LIKE的作品,你的mydate领域显然是一个的varchar类型而不是fullworthy date,datetime或timestamp类型.这是问题的秘诀.您应始终使用正确的数据类型来获取该字段所包含的信息.
%不能放在准备好的占位符之后?.必须直接在值中设置它.但是,这String仅适用于值(因此也适用于varchar字段类型).对于fullworthy date,datetime并timestamp 输入你想使用=,<,>或BETWEEN代替.
有两种解决方案:
将字段的数据类型更改为实数date,datetime或者timestamp,以便您可以使用正确的SQL语法,例如WHERE mydate BETWEEN ? AND ?.
preparedStatement.setString(1, "2000-01-13%")改为使用并删除占位符周围的那些单引号,?以便它结束WHERE mydate LIKE ?.