ksm*_*ark 5 java ms-access datetime jdbc ucanaccess
在Java中使用UCanAccess驱动程序时,我发现将日期输出为特定格式非常困难.目前,我正在使用PreparedStatement.setDate()方法,该方法要求日期格式为[yyyy-MM-dd HH:mm:ss].当用户打开文件时,结果输出也采用这种格式.
编辑* - 我没有使用带有格式化日期的setDate()方法,此方法只接受没有格式化的Java Date对象.我打算写的是我在处理格式化日期时使用setString()方法,但UCanAccess要求此日期字符串格式为[yyyy-MM-dd HH:mm:ss].我真的只是想弄清楚如何在调用setString()之后将其提供给不同的格式或更改格式.
到目前为止一切都很好,但现在我需要提供各种格式的日期文件,如[MM-dd].我可以通过使生成的Access字段键入备注或文本来完成此操作,但问题变为当我需要日期为该格式并且仍然将生成的Access字段类型设置为日期/时间.
我注意到在UCanAccess首页上,它提到支持访问日期格式,但我在几次谷歌搜索后没有找到任何示例.任何人都知道如何使用此驱动程序格式化日期,同时保持正确的日期/时间类型?
提前致谢!
当您通过 UCanAccess 检索日期/时间字段值时,您将获得一个java.sql.Timestamp
对象。它包含日期/时间值,但它不具有的格式本身。
如果您想以特定方式表示该日期/时间值,您只需根据自己的喜好对其进行格式化。可能最简单的方法是使用java.text.SimpleDateFormat
. 例如:
try (ResultSet rs = s.executeQuery("SELECT DateJoined FROM Members WHERE MemberID=1")) {
rs.next();
System.out.printf(
" \"raw\" value (via .toString()): %s%n",
rs.getTimestamp(1).toString());
SimpleDateFormat mmddFormat = new SimpleDateFormat("MM-dd");
System.out.printf(
"formatted value (via SimpleDateFormat): %s%n",
mmddFormat.format(rs.getTimestamp(1)));
}
Run Code Online (Sandbox Code Playgroud)
给我们
"raw" value (via .toString()): 2014-01-23 00:00:00.0
formatted value (via SimpleDateFormat): 01-23
Run Code Online (Sandbox Code Playgroud)
(请注意,当 UCanAccess 页面谈到“访问日期格式”时,它指的是包含在哈希标记中的日期/时间文字,如下所示:#11/22/2003 10:42:58 PM#
。但是,您几乎不需要在查询中包含日期文字,因为您应该使用aPreparedStatement
带有适当的.setTimestamp()
参数。)
附录
类似地,当将日期/时间值插入 Access 数据库时:Java 中日期/时间值的格式对日期/时间值在 Access 中的存储方式没有影响(前提是它被正确解释),以及它会显示在访问的格式设置功能的访问。例如,如果我们运行以下 Java 代码
try (Statement s = conn.createStatement()) {
s.executeUpdate(
"INSERT INTO tblDates " +
"(ID, mmddyyyy) " +
"VALUES " +
"('literal', #12/25/2014#)"
);
}
SimpleDateFormat mmddyyyyFormat = new SimpleDateFormat("MM/dd/yyyy");
Timestamp mmddyyyyXmas =
new Timestamp(mmddyyyyFormat.parse("12/25/2014").getTime());
SimpleDateFormat ddmmyyyyFormat = new SimpleDateFormat("dd/MM/yyyy");
Timestamp ddmmyyyyXmas =
new Timestamp(ddmmyyyyFormat.parse("25/12/2014").getTime());
SimpleDateFormat yyyymmddFormat = new SimpleDateFormat("yyyy/MM/dd");
Timestamp yyyymmddXmas =
new Timestamp(yyyymmddFormat.parse("2014/12/25").getTime());
try (PreparedStatement ps = conn.prepareStatement(
"INSERT INTO tblDates " +
"(ID, mmddyyyy, ddmmyyyy, yyyymmdd) " +
"VALUES " +
"('parameters', ?, ?, ?)"
)) {
ps.setTimestamp(1, mmddyyyyXmas);
ps.setTimestamp(2, ddmmyyyyXmas);
ps.setTimestamp(3, yyyymmddXmas);
ps.executeUpdate();
}
Run Code Online (Sandbox Code Playgroud)
然后在Windows设置为使用默认格式“英语(美国)”的情况下打开Access数据库,我们看到
如果我们将 Windows 中的格式设置更改为“英语(英国)”,那么我们会看到
如果我们想为一个或多个字段使用特定的格式,我们需要在 Access 中使用特定的格式设置,例如,像这样
我们看
归档时间: |
|
查看次数: |
4444 次 |
最近记录: |