- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我想在 DATE
列中存储一个 LocalDate
并在不改变的情况下检索它。根据定义,DATE
和 LocalDate
都是“本地”类型。因此,时区 的概念不应以任何方式干扰。
下面的代码是一个最小的示例,它在内存数据库中创建一个包含 DATE
列的表。 Maven 工件 com.h2database:h2:1.4.192
必须在类路径中。
首先,定义方法insert
和retrieve
:
static void insert(DataSource ds, String date) throws SQLException {
try (Connection conn = ds.getConnection();
Statement stmt = conn.createStatement()) {
stmt.execute("CREATE TABLE people (id BIGINT NOT NULL AUTO_INCREMENT"
+ ", born DATE NOT NULL, PRIMARY KEY (id) );");
stmt.execute("INSERT INTO people (born) VALUES ('" + date + "')");
}
}
static LocalDate retrieve(DataSource ds) throws SQLException {
try (Connection conn = ds.getConnection();
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("SELECT * FROM people limit 1")) {
if (rs.next()) {
java.sql.Date retrieved = java.sql.Date.valueOf(rs.getString("born"));
return retrieved.toLocalDate();
}
throw new IllegalStateException("No data");
}
}
请注意,insert
方法在单引号中使用 LocalDate
的 toString
值,因此 Java™ 没有机会创建时区歧义。现在调用 insert
一次,然后多次调用 retrieve
,每次使用不同的时区设置:
public static void main(String[] args) throws Exception {
DataSource ds = JdbcConnectionPool.create("jdbc:h2:mem:test", "sa", "sa");
LocalDate born = LocalDate.parse("2015-05-20");
insert(ds, born.toString());
System.out.println("Inserted: " + born);
for (int i : new int[]{-14, 0, 12}) {
TimeZone z = TimeZone.getTimeZone(String.format("Etc/GMT%+02d", i));
TimeZone.setDefault(z);
System.out.println("Retrieved: " + retrieve(ds));
}
}
然后打印如下:
Inserted: 2015-05-20Retrieved: 2015-05-20Retrieved: 2015-05-19Retrieved: 2015-05-18
假设数据库表未更改,如何编写retrieve
方法以使其返回无条件插入的相同值?
最佳答案
我刚刚尝试对您的 retrieve
方法进行以下修改,它对我有用:
H2 documentation for the DATE Type说是
The date data type. The format is yyyy-MM-dd.
所以,而不是你的......
java.sql.Date retrieved = (java.sql.Date) rs.getObject("born");
return retrieved.toLocalDate();
...我刚刚用过...
return LocalDate.parse(rs.getString("born"));
...以及我生成的代码
Inserted: 2015-05-20
Retrieved: 2015-05-20
Retrieved: 2015-05-20
Retrieved: 2015-05-20
关于java - 如何将 sql DATE 映射到 LocalDate,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37779418/
我正在尝试计算 2 个 localDates 之间的天数 我从这个答案中获得灵感:https://stackoverflow.com/a/325964对于这个问题Determine Whether T
我在使用 Joda daysBetween 函数时遇到问题。它一直在告诉我 The method daysBetween(ReadableInstant, ReadableInstant) in th
初始问题: 在Scala中,我想使用隐式 Ordering[T]#Ops比较两个LocalDate . 它只是使用像 > 这样的“运算符”而不是isAfter . 它应该只是一个导入:import s
如何删除 localDate 中的 T? 我需要删除“T”以匹配数据库中的数据。 这是我的代码 DateTimeFormatter formatter = DateTimeFormatter.ofPa
这个问题已经有答案了: How to format LocalDate object to MM/dd/yyyy and have format persist (4 个回答) How can you
这个问题在这里已经有了答案: What is the difference between public, protected, package-private and private in Jav
这个问题已经有答案了: SimpleDateFormat ignoring month when parsing (4 个回答) Java date format conversion - getti
这个问题已经有答案了: SimpleDateFormat ignoring month when parsing (4 个回答) Java date format conversion - getti
这个问题在这里已经有了答案: Localdate.format, format is not applied (2 个答案) How to format LocalDate to string? (
这个问题在这里已经有了答案: Importing two classes with same name. How to handle? (11 个回答) 7年前关闭。 我正在练习如何处理日期。但是当我
根据 Joda 中的文档: public LocalDate(int year, int monthOfYear, int dayOfMonth, Chronology chron
我正在尝试开发一个独立于 GWT 的通用模块,直到它实际在 GWT 应用程序中使用为止。问题是 GWT 不支持 joda 并且我的模块不使用 GWT。 我想要实现的目标(这行不通): 最
问题:Spring 似乎对 LocalDate 使用不同的反序列化方法,具体取决于它是出现在 @RequestBody 还是请求 @ReqestParam -这是正确的吗?如果是这样,是否有办法将它们
我想使用 Java8 DateTime API 中的 LocalDate 和 LocalDateTime,并且在值为 null 时无法坚持到 postgresql date 和 timestamp。
我正在做以下编程练习:Unlucky Days 。声明如下: Friday 13th or Black Friday is considered as unlucky day. Calculate h
这个问题已经有答案了: Java 8 LocalDateTime is parsing invalid datetime (5 个回答) How to sanity check a date in J
我有一个包含以下字段的员工类。 class Employee { final int id; final String name; final LocalDate update
这个问题已经有答案了: If statement gives condition is always true (4 个回答) 已关闭 3 年前。 我试图将两个日期与日期列表进行比较(列表元素已被删除
被这个问题困扰了一段时间,希望得到一些意见。我想验证用户输入的日期,以便我可以使用 LocalDate 对象执行计算。但是,当输入有效日期时,返回的日期是前一个无效日期,这会引发异常并崩溃。我错过了什
这个问题已经有答案了: How can I parse/format dates with LocalDateTime? (Java 8) (11 个回答) 已关闭 3 年前。 我有一个日期时间信息字
我是一名优秀的程序员,十分优秀!