“已解决”使用ODBC查询Exceldate字段返回null

我使用下面的configuration来运行一个java程序从excel文件中提取数据。 其中一些列具有带时间戳上下文的数据。

  • 平台:Win 7(x64)
  • ODBC:Excel(x32)[通过Office 2010]; 行扫描= 8
  • Excel架构:“一些字段”,“date字段1”,“date字段2”,“date字段3”,“其他字段”
  • date格式显示在Excel中:dd / mm / yyyy HH:MM
  • Java 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"

我确定“date字段2”包含有效的date值(但为前20行清空),Java程序总是返回null为该列。

那么,我的问题是初始行的[date field 2]的空值是8行,会影响JDBC / ODBC的行为吗? 如果是的话,如何避免它(没有sorting的Excel文件中的数据)?

– 编辑 – 实际上,我问,前几行(如8)的空字段是否会使驱动程序无法提取该列的值(即使后续行包含有效值)。 我也困惑,如果它是特定于实现的驱动程序将简单地拒绝提取该字段,为所有条件返回null,甚至不尝试将该列视为stringtypes或返回空string(而不是NULL)

– 编辑 – 引用此KB中的信息: http : //support.microsoft.com/kb/141284

[date字段2]中前几行的空值将使ODBC驱动程序在所有条件下都返回NULL。 所以find了根本原因,接下来要findExcel文件的替代JDBC驱动程序。

谢谢。

如果前8行是空的,Excel ODBC驱动程序将不会正确地将该列标识为date列,因此尝试为所有其他行获取date值将不会成功。 这是没有办法的,这不是一个Java特有的问题。

我对JDBC并不是很熟悉,但是如果你调用一个返回字段date值的方法,试着调用方法来获取string值,然后把string自己parsing成一个date值(如果没有, t工作,调用返回一个浮点值的方法,因为这是如何Exceldate内部存储)。

或者,更好的解决scheme是不使用Excel的ODBC驱动程序(这是出了名的错误和有限的),而是使用Apache POI库,而不是本地读取Excel文件。 你失去了查询的语法糖,但通过活动行来查找数据的一个简单的循环将做的伎俩。