ResultSet.getString(Datum) unterscheidet sich basierend auf die Treiber
Bin ich mit dem "Oracle Database 11g Enterprise Edition Release 11.2.0.2.0 - 64bit-Produktion Mit der Partitionierung, OLAP, Data Mining and Real Application Testing options"
Ich habe eine Tabelle, deren schema ist
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
Ich geschrieben habe ein einfaches java-client zum abrufen der 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("----------------------------------------------------");
}
Mit ojdbc6.jar(12.1.0.1.0) Ausgabe : As String :2013-11-12
Mit ojdbc6.jar(11.2.0.2.0) Ausgabe : As String :2013-11-12 11:10:09
Java-version : 1.7
Warum die änderungen im Verhalten ojdbc6.jar(12.1.0.1.0) ?
Wenn ich die Ausgabe in das format 2013-11-12 11:10:09
mit ojdbc6.jar(12.1.0.1.0) was soll ich tun?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sollten Sie nie verlassen Sie sich auf die Treiber, um implizit zu konvertieren ein Datum zu einem bestimmten string-format - das format ist eine Implementierung detail des Fahrers. Sie sollten handle der Umstellung selbst.
Diese kann entweder in der Java-Ebene:
Oder durch die Abfrage selbst:
ResultSet.getTimeStamp(String)
gibt, erstreckt sichjava.util.Date
(siehe javadoc). Ich habe nicht dieimport
Aussagen in meine Antwort, aber das war die Absicht.Gibt es ein verändertes Verhalten im ResultSet#getDate() das scheint die Ursache für dieses problem.
Finden Sie unter: ResultSet#getDate () - Semantik.
In meinem Fall konnte ich das nicht ändern Tausende von code-Zeilen. Es scheint, dass oracle nimmt standardmäßig eine variable namens NLS_LANG. Die Einstellung das problem gelöst, für mich z.B. NLS_LANG=SPANISH_SPAIN.WE8ISO8859P15
http://www.oracle.com/technetwork/products/globalization/nls-lang-099431.html