2011-11-22 46 views
1

我使用以下配置運行java程序以從excel文件中提取數據。其中一些列具有帶時間戳上下文的數據。「已解決」使用ODBC查詢Excel日期字段返回空值

  • 平臺:Win 7(64)
  • ODBC:Excel中(X32)[經由辦公室2010];要掃描的行數= 8
  • Excel架構:「某些字段」,「日期字段1」,「日期字段2」,「日期字段3」,「其他字段」
  • Excel中顯示的日期格式:dd/mm/YYYY HH:MM
  • 爪哇1.6
  • JDBC/ODBC驅動程序:在sun.jdbc.odbc.JdbcOdbcDriver

我嘗試以下(簡化的)查詢來提取數據:

SELECT [field 1], [date field 1], [date field 2] from [Sheet1$]

SELECT [field 1], [date field 1], [date field 2] from [Sheet1$] where [field 1] = "sample values"

我敢肯定,「日期字段2」中包含有效的日期值(但對於清空第20行) 和Java程序總是該列返回null。

所以,我的問題是,初始行的[date field 2]的空值是8行,會影響JDBC/ODBC的行爲嗎?如果是,如何避免它(沒有在excel文件中對數據進行排序)?

- 編輯 - 實際上,我問是否在前幾行(如8)中的該字段的空值將使驅動程序無法提取該列的值(即使後續行包含有效值)。我也困惑,如果它是特定於實現的驅動程序將簡單地拒絕提取該字段,爲所有條件返回null,甚至不嘗試將該列視爲字符串類型或返回空字符串(而不是NULL)

- 編輯 - 參照這個KB的信息:http://support.microsoft.com/kb/141284

在[日期字段2]的前幾排的空值將在所有條件下的ODBC驅動程序返回NULL。因此找到了根本原因,接下來要找到Excel文件的替代JDBC驅動程序。

謝謝。

+0

你問是否JDBC可以處理空列(當然可以!)。還是你問如果你的代碼遇到null時應該如何迴應?還是你問完全其他的東西?請澄清。 – paulsm4

回答

1

如果前8行爲空,Excel ODBC驅動程序將不會正確標識該列作爲日期列,因此嘗試獲取的所有其他行的日期值都不會成功。沒有辦法解決這個問題,這不是一個特定於Java的問題。

我對JDBC並不是很熟悉,但是如果您要調用一個方法來爲字段返回一個日期值,請嘗試調用方法來拉取字符串值,然後將字符串自己解析爲日期值(如果這不起作用,請調用返回浮點值的方法,因爲這是Excel日期在內部存儲的方式)。

或者,很多更好的解決方案是不使用Excel的ODBC驅動程序(這是出了名的錯誤和有限),而是使用Apache POI庫,而不是原生讀取Excel文件。你失去了查詢的語法糖,但是通過活動行來查找數據的簡單循環將會起到關鍵作用。

+0

感謝您的意見,但我仍然需要一個支持SQL的JDBC驅動程序來滿足Excel的功能要求。 –

+1

如果您可以更改電子表格,那麼您可以對行進行排序,以便在前八行中的至少一行中具有每個日期字段的值,或者可以插入一些虛擬數據,並將所有字段填入第一行的電子表格(並跳過查詢中的那一行) – barrowc