繁体   English   中英

使用 java.sql.Date

[英]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 个严重的问题:

  1. 鉴于LIKE有效,您的mydate字段显然是varchar类型,而不是完全值得的datedatetimetimestamp类型。 这是解决问题的方法。 您应该始终为字段保存的信息使用正确的数据类型。

  2. %不能放在preparedstatement 占位符之后? . 它必须直接在值中设置。 但是,这仅适用于String值(因此也适用于varchar字段类型)。 对于完整的datedatetimetimestamp类型,您宁愿使用=<>BETWEEN

有2个解决方案:

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

  2. 改用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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM