[英]Using java.sql.Date
我正在使用 jdbc 调用 sql 查询“ .... where mydate like '?%'
”,我想将参数传递给查询:
PreparedStatement ps;
ps.setDate(1, new java.sql.Date.valueOf("2000-01-13"));
但是最后一行没有编译,我不知道为什么。 当我直接在上面的查询中输入日期时,如“.. where mydate like '2000-01-13%'”,它可以工作。
除了基本的编译错误(只是删除new
),我发现了 2 个严重的问题:
鉴于LIKE
有效,您的mydate
字段显然是varchar
类型,而不是完全值得的date
、 datetime
或timestamp
类型。 这是解决问题的方法。 您应该始终为字段保存的信息使用正确的数据类型。
%
不能放在preparedstatement 占位符之后?
. 它必须直接在值中设置。 但是,这仅适用于String
值(因此也适用于varchar
字段类型)。 对于完整的date
、 datetime
和timestamp
类型,您宁愿使用=
、 <
、 >
或BETWEEN
。
有2个解决方案:
将字段的数据类型更改为真实date
、 datetime
时间或timestamp
,以便您可以使用正确的 SQL 语法,例如WHERE mydate BETWEEN? AND?
WHERE mydate BETWEEN? AND?
.
改用preparedStatement.setString(1, "2000-01-13%")
并删除占位符周围的那些单引号?
以及它的结尾像WHERE mydate LIKE?
.
你会想要使用:
java.sql.Date.valueOf("2000-01-13")
也就是说,不要在它前面使用new
。 通过使用new
,您是在告诉编译器您要创建一个新的 object。 由于valueOf
是一个 static 方法,因此您无需创建 object 即可调用它。
无论如何,它不能编译的原因是new java.sql.Date.valueOf("str")
不是一个有效的语句。 如果你想创建一个Date
的新实例,你必须用括号说new java.sql.Date()
,你可以这样做,但是通过不同的方式。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.