gpt4 book ai didi

java - NLS_DATE_FORMAT 与 JDBC

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:06:12 24 4
gpt4 key购买 nike

我试过在jdbc里面设置NLS_DATE_FORMAT,好像没什么效果。我的代码:

//...
Connection conn = ods.getConnection();
Statement stat = conn.createStatement();

stat.execute("alter session set NLS_DATE_FORMAT='YYYY-DD-MM'");
ResultSet rs = stat.executeQuery("select date_column from test_table");

System.out.println(rs.getString(1)); // *** new format not effective here ***
//...

经过一番阅读。我知道 NLS_DATE_FORMAT 在 JDBC 驱动程序中是硬编码的。它是否正确 ?由此得出的结论:

Language and Territory

The Thin driver obtains language and territory settings (NLS_LANGUAGE and NLS_TERRITORY) from the Java locale in the JVM user.language property. The date format (NLS_DATE_FORMAT) is set according to the territory setting.

所以我尝试了这个:

Locale.setDefault(new Locale("en", "US"));
Connection conn = ods.getConnection();
Statement stat = conn.createStatement();

ResultSet rs = stat.executeQuery("select date_column from test_table");

System.out.println(rs.getString(1)); // *** JVM format not effective here

但它不起作用。而不是得到类似的东西

10-OCT-15 (NLS_DATE_FORMAT for US = 'DD-MON-RR')

我明白了

2015-10-10 00:00:00.0

使用 ORACLE 11g,Oracle jdbc 驱动器 12.1,java 8

最佳答案

来自 JDBC 驱动程序的 NLS 支持是 dropped in Oracle 10g .无论如何,我建议您不要依赖特定于 Oracle 的 NLS 功能来格式化您的日期。

要格式化从 Java 中的任何数据库检索到的日期,请执行以下操作:

Connection conn = ods.getConnection();
Statement stat = conn.createStatement();

ResultSet rs = stat.executeQuery("select date_column from test_table");

DateFormat format = new SimpleDateFormat('yyyy-dd-MM');
System.out.println(format.format(rs.getDate(1));

请注意,SimpleDateFormat 的实例可重用但不是线程安全的

如果您使用的是 Java 8,您可能希望改用新的和改进的 Java Time API。遗憾的是,ResultSet 尚未更新为返回 DateTime 的实例,因此您必须进行转换。查看DateTimeFormatterthis question关于如何从旧转换为新。除其他优势外,DateTimeFormatter 是完全线程安全的。

新旧样式的格式模式是一样的; here are the docs对于新的。

关于java - NLS_DATE_FORMAT 与 JDBC,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36649277/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com