Java 将日期作为参数传递
我用Java做了一个SQL查询,如下所示: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
"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
方法,只传递不同的类型。