Using java.sql.Date
I am using jdbc to call a sql q开发者_如何学运维uery ".... where mydate like '?%'
"
and I want to pass the parameter to the query with:
PreparedStatement ps;
ps.setDate(1, new java.sql.Date.valueOf("2000-01-13"));
But this last line is not compiling, and I don't know why. When i enter the date directly into the query above, as in ".. where mydate like '2000-01-13%'", it works.
Apart from the basic compilation error (just remove new
), I spot 2 serious problems:
Given the fact that
LIKE
works, yourmydate
field is apparently of avarchar
type instead of a fullworthydate
,datetime
ortimestamp
type. This is recipe for problems. You should always use the right data type for the information the field holds.%
cannot be put after preparedstatement placeholder?
. It has to be set in the value directly. However, this works withString
values only (and thusvarchar
field types). For a fullworthydate
,datetime
andtimestamp
type you'd rather use=
,<
,>
orBETWEEN
instead.
There are 2 solutions:
Change the data type of the field to be a real
date
,datetime
ortimestamp
, so that you can use the proper SQL syntax such asWHERE mydate BETWEEN ? AND ?
.Use
preparedStatement.setString(1, "2000-01-13%")
instead and remove those singlequotes around the placeholder?
as well so that it ends likeWHERE mydate LIKE ?
.
See also:
- Preparedstatement tutorial
- MySQL data types
You'll want to use:
java.sql.Date.valueOf("2000-01-13")
That is, do not use new
in front of it. By using new
, you are telling the compiler you want to create a new object. Since valueOf
is a static method, you do not need to create an object in order to call it.
Regardless, the reason it does not compile is because new java.sql.Date.valueOf("str")
is not a valid statement. You would have to say new java.sql.Date()
with parentheses if you wanted to create a new instance of Date
, which you do, but by a different means.
精彩评论