如何在 java JDBC 和 sql 中操作日期和时间

How to manipulate date and time in java JDBC and sql

我正在制作一个应用程序,该应用程序具有使用 JDBC 访问的数据库。 我正在使用 mysql 但稍后我将在一个强制使用 Oracle 的平台上托管我的数据库。

假设我想制作一个 table employee 来映射员工、他受雇的日期和他下班的时间。

我决定做的是使用日期和时间作为字符串。所以要创建一个 table 我会使用 :

CREATE TABLE employee
(
   ID VARCHAR(255),
   dateEmployed VARCHAR(255),
   endShift VARCHAR(255),
   Primary key (ID)
);

然后在 java 和 jdbc 中,我只使用 executeQuery 搜索所有员工并在纯 java 中过滤结果。 这种方法似乎很幼稚,因为我无法通过 Java jdbc 比较 sql 中的日期和时间字符串。我怎样才能以正确的方式做到这一点?

What I decided to do is use Date and Time as strings.

不要

如果要存储日期和时间,请使用 DATE 数据类型(在 Oracle 中,它同时存储日期和时间)。

CREATE TABLE employee
(
   ID           VARCHAR(255),
   dateEmployed DATE,
   endShift     DATE, -- or maybe INTERVAL DAY(0) TO SECOND if you want time
                      -- without a date.
   PRIMARY KEY (ID)
);

Then in java with jdbc I just use the executeQuery to search for all the employee and filter the result in pure java. This method seems naive, as I cannot compare the strings for date and time in sql through a Java jdbc. How can I do this the correct way?

如果您想过滤日期,例如,获取 2022 年 1 月开始工作的所有员工,则:

SELECT *
FROM   employee
WHERE  dateEmployed >= DATE '2022-01-01'
AND    dateEmployed <  DATE '2022-02-01'

如果您想使用来自 JDBC 的绑定参数,那么您的查询应该是:

SELECT *
FROM   employee
WHERE  dateEmployed >= ?
AND    dateEmployed <  ?

然后在准备好的语句中设置日期(如果您的绑定值没有时间组件)或时间戳(如果您有时间组件)绑定参数。