Java 将日期作为参数传递

Java 将日期作为参数传递,java,sql,datetime,Java,Sql,Datetime,我用Java做了一个SQL查询,如下所示: "SELECT A.ID_MACHINE, A.HEURODATAGE, A.COMPTEUR, B.LIBELLE_IDMACHINE, C.LIBELLE_STATUT, C.CODE_COULEUR FROM ROXJAVA.MACH0004 A " + "JOIN ROXJAVA.MACH0003 B ON A.ID_MACHINE = B.ID_MACHINE " + "JOIN ROXJAVA.MACH0002 C ON B.CODE_MA

我用Java做了一个SQL查询,如下所示:

"SELECT A.ID_MACHINE, A.HEURODATAGE, A.COMPTEUR, B.LIBELLE_IDMACHINE, C.LIBELLE_STATUT, C.CODE_COULEUR FROM ROXJAVA.MACH0004 A " +
"JOIN ROXJAVA.MACH0003 B ON A.ID_MACHINE = B.ID_MACHINE " +
"JOIN ROXJAVA.MACH0002 C ON B.CODE_MACHINE = C.CODE_MACHINE " +
"WHERE A.ID_MACHINE = ? AND A.HEURODATAGE BETWEEN '?' AND '?' AND A.CODE_STATUT = C.CODE_STATUT AND C.CODE_COULEUR = ? " +
"ORDER BY A.HEURODATAGE DESC";
在my WHERE中,它找到“Heurodatage”,其中必须包含具有以下格式的时间和日期:

“2018-07-03 09:30:00.000”

然后,我想借助一种方法来检索这个查询的结果,该方法考虑了我需要替换的不同属性?在我的请求中

但现在我无法确定我的约会类型


当我尝试使用字符串运行时,得到“类型不匹配”。

如果该列是日期列,则您希望传入日期类型:

PreparedStatement ps = ...;
ps.setDate(N, java.sql.Date.valueOf(your_date_value));

如果您的“日期”值是java.time.LocalDate,但也可以从字符串(以有效格式)解析,则最好是这样做。

介于“?”和“?”之间。
应该是
介于?和?
,并且实际的dat类型可能不是varchar,而是日期或时间戳,因此应该将java.sql.timestamp的实例作为参数传递给准备好的语句,而不是字符串。更好的是,@JBNizet,前提是至少可以使用Java8和JDBC4.2,跳过过时的
Timestamp
类,使用
Java.time
,即现代Java日期和时间API。根据数据库列的确切数据类型,使用例如
yourPreparedStatement.setObject(2,yourLocalDateTime)
(传递的Java对象可以是
LocalDateTime
Instant
)。如果
your\u date\u值
LocalDate
(我同意推荐一个日期),并且您的JDBC驱动程序符合JDBC 4.2(我相信现在大多数是这样),那么只需
ps.setObject(N,your\u date\u值)。“Horodatage”意味着时间戳,所以它可能是一个时间戳列。调用相同的
setObject
方法,只传递不同的类型。