使用java.sql.Date

0 java jdbc

我正在使用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%'",它的工作原理.

Bal*_*usC 5

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

  1. 鉴于这样的事实LIKE的作品,你的mydate领域显然是一个的varchar类型而不是fullworthy date,datetimetimestamp类型.这是问题的秘诀.您应始终使用正确的数据类型来获取该字段所包含的信息.

  2. %不能放在准备好的占位符之后?.必须直接在值中设置它.但是,这String仅适用于值(因此也适用于varchar字段类型).对于fullworthy date,datetimetimestamp 输入你想使用=,<,>BETWEEN代替.

有两种解决方案:

  1. 将字段的数据类型更改为实数date,datetime或者timestamp,以便您可以使用正确的SQL语法,例如WHERE mydate BETWEEN ? AND ?.

  2. preparedStatement.setString(1, "2000-01-13%")改为使用并删除占位符周围的那些单引号,?以便它结束WHERE mydate LIKE ?.

也可以看看: