gpt4 book ai didi

oracle - ResultSet.getString(Date) 根据驱动程序而有所不同

转载 作者:行者123 更新时间:2023-12-02 08:25:17 24 4
gpt4 key购买 nike

我正在使用“Oracle Database 11g 企业版版本 11.2.0.2.0 - 64 位生产,具有分区、OLAP、数据挖掘和实际应用程序测试选项”

我有一个表,其架构为

COLUMN_NAME     DATA_TYPE   DATA_TYPE_MOD   DATA_TYPE_OWNER    DATA_LENGTH
CITY VARCHAR2 (null) (null) 30
COUNTRY VARCHAR2 (null) (null) 30
DATE_TYPE DATE (null) (null) 7
PARTNO NUMBER (null) (null) 22
STATE VARCHAR2 (null) (null) 30
ZIP VARCHAR2 (null) (null) 30

我编写了一个简单的 Java 客户端来获取 DATE_TYPE

 public class DateIssue {  
private void testDateOutput() {
Connection con = null;
Statement psmt = null;
try {
con = getConnection();
con.setAutoCommit(true);
psmt = con.createStatement();
String sql = "SELECT DATE_TYPE FROM EMP";
ResultSet rs = psmt.executeQuery(sql);
while (rs.next()) {
String dateString = rs.getString(1);
System.out.println("As String :"+ dateString);
}
con.close();
}
catch (SQLException e) {
e.printStackTrace();
}
}
private static Connection getConnection() {
Connection connection = null;
try {
Class.forName("oracle.jdbc.pool.OracleDataSource");
java.util.Properties info = new java.util.Properties();
info.put("user", "myuser");
info.put("password", "mypass");
info.put("oracle.jdbc.mapDateToTimestamp", "false");
connection = DriverManager.getConnection("jdbc:oracle:thin:@myserver:1521:myservicename", info);
}
catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
return connection;
}
public static void main(String rgs[]) throws Exception {
DateIssue di = new DateIssue();
di.testDateOutput();
System.out.println("----------------------------------------------------");
}

使用 ojdbc6.jar(12.1.0.1.0) 时,输出为:As String :2013-11-12
使用 ojdbc6.jar(11.2.0.2.0) 的输出为: As String :2013-11-12 11:10:09

Java版本:1.7

为什么 ojdbc6.jar(12.1.0.1.0) 中的行为发生变化?如果我需要使用 ojdbc6.jar(12.1.0.1.0) 以 2013-11-12 11:10:09 格式输出,我该怎么办?

最佳答案

您应该永远依赖驱动程序将日期隐式转换为任何特定的字符串格式 - 该格式是驱动程序的实现细节。您应该自己处理转换。

这可以在 Java 级别完成:

/* executing the statement, etc. - snipped for clarity */
DateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
while (rs.next()) {
Date date = rs.getTimestamp(1);
System.out.println("As String :"+ formatter.format(date));
}

或者通过查询本身:

/* Setting up the connection, etc. - snipped for clarity */
String sql = "SELECT TO_CHAR(date_type, 'yyyy-mm-dd hh24:mi:ss') FROM emp";
ResultSet rs = psmt.executeQuery(sql);
while (rs.next()) {
String dateString = rs.getString(1);
System.out.println("As String :" + dateString);
}

关于oracle - ResultSet.getString(Date) 根据驱动程序而有所不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19840542/

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