यह अभी भी जेटीडीएस 1.3.1 के साथ एक खुला मुद्दा प्रतीत होता है। मैं टेबल के साथ मैं काम कर रहा हूँ के लिए सीधे एसक्यूएल सर्वर तालिका सूची क्वेरी करने, और मेज के लिए तिथि कॉलम की एक सूची हो रही द्वारा यह आस-पास काम करने में सक्षम था:
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;
}
बार जब आप इस सूची है, आप कर सकते हैं स्पष्ट रूप से जाँच करें और देखें कि स्तंभ दिनांक प्रकार है:
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;
}
तो, मैं तीन स्तंभों के साथ एक नमूना तालिका है कहना डीएस:
... 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/डॉक्स/एपीआई/स्थिर-मूल्य.html # java.sql.Types.DATE – FlyingDutchman
मुझे भी इसी तरह का लिंक मिला: http://stackoverflow.com/questions/7885459/jdbc-jtds-bug-for-columns- ऑफ-टाइप-डेट-एंड-टाइमएक्स – FlyingDutchman