이것은 여전히 jTDS 1.3.1에서 열린 문제로 보입니다. 내가 함께 일하고 있어요 테이블에 대한 직접 SQL Server 테이블 카탈로그를 쿼리하고 테이블에 대한 날짜 열 목록을 얻어서 그것을 해결할 수 있었다 :
private HashMap<String,Boolean> getDateColumns (String tableName, String schemaName, Connection conn) throws Exception {
String sql = "SELECT table_name + ',' + column_name"
+ " FROM INFORMATION_SCHEMA.COLUMNS "
+ " WHERE TABLE_SCHEMA = N'" + schemaName + "' "
+ " AND table_name = N'" + tableName + "' "
+ " AND data_type IN ('date', 'datetime', 'datetime2')";
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery(sql);
HashMap<String,Boolean> dateCols = new HashMap<String,Boolean>();
while (rs.next()) {
String tableColKey = rs.getString(1);
dateCols.put(tableColKey.toUpperCase(), true);
}
rs.close();
return dateCols;
}
당신이 목록이 있으면, 당신이 할 수있는 JT와 함께 실행할 때
이
SAMPLE
------------------
SITE_ID numeric
START_DATE date
END_DATE date
이 코드는 다음 값을 출력 할 것이다 :
private ResultSetMetaData getTableMetaData (String tableName, Connection conn) throws Exception {
String sql = "SELECT * FROM dbo." + tableName + " where 1 = 2 ";
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery(sql);
ResultSetMetaData rsmd = rs.getMetaData();
rs.close();
HashMap<String,Boolean> dateColumns = getDateColumns (tableName, conn);
for (int i = 1; i <= rsmd.getColumnCount(); i++) {
String key = tableName + "," + rsmd.getColumnName(i);
int type = -1;
if (dateColumns.containsKey(key)) {
type = Types.DATE;
}
else {
type = rsmd.getColumnType(i);
}
System.out.println ("... col: " + rsmd.getColumnName(i) + ", driver type name: " + rsmd.getColumnTypeName(i) + ", driver type: " + rsmd.getColumnType(i) + ", final data type: " + type);
}
return rsmd;
}
그래서, 나는 세 개의 열이있는 샘플 테이블이 있다고 가정 : 열이 날짜 유형의 경우 명시 적으로 확인하고 참조 DS :
... col: SITE_ID, driver type name: numeric, driver type: 2, final data type: 2
... col: START_DATE, driver type name: nvarchar, driver type: 12, final data type: 91
... col: END_DATE, driver type name: nvarchar, driver type: 12, final data type: 91
비슷한 문제가있는 다른 사람들에게도 적합합니다.
'.getTimestamp ("DATA_TYPE")' – epoch
내 지식에 따라 getInt ("DATA_TYPE")는 http://docs.oracle.com/javase/1.4에서 유형 중 하나를 반환해야합니다. .2/docs/api/constant-values.html # java.sql.Types.DATE – FlyingDutchman
나는 또한 이와 비슷한 링크를 발견 : http://stackoverflow.com/questions/7885459/jdbc-jtds-bug-for-columns- of-date-and-timex – FlyingDutchman