2011-06-30 55 views
0

当使用Resultset.getDate()提取数据库日期,我得到以下异常:Resultset.getDate()抛出异常java.lang.NumberFormatException:对于输入字符串:“月之名”

java.lang.NumberFormatException: For input string: "Name of Month". 

我可以证实尝试从Oracle日期数据类型的列中获取数据时引发异常。

,因为它是非常长的,我不能在这里贴实际的代码。但示例代码如下给出

pstmnt = connection.prepareStatement(selectQuery); 
rs = pstmnt.executeQuery(); 
while (rs.next()) { 
    rs.getDate(column.getColName()); 
} 

请帮忙?

按照要求由桑杰,请在下面找到

java.lang.NumberFormatException: For input string: "MAY" 
    at java.lang.NumberFormatException.forInputString(NumberFormatException.java:63) 
    at java.lang.Integer.parseInt(Integer.java:481) 
    at java.lang.Integer.parseInt(Integer.java:531) 
    at java.sql.Date.valueOf(Date.java:200) 
    at oracle.jdbc.driver.OracleStatement.getDateValue(OracleStatement.java:4610) 
    at oracle.jdbc.driver.OracleResultSetImpl.getDate(OracleResultSetImpl.java:625) 
    at oracle.jdbc.driver.OracleResultSet.getDate(OracleResultSet.java:1601) 
    at quotecopy.DbConnection.getTableRows(DbConnection.java:126) 
    at quotecopy.QuoteCopier.main(QuoteCopier.java:66) 
java.lang.NumberFormatException: For input string: "MAY" 
    at java.lang.NumberFormatException.forInputString(NumberFormatException.java:63) 
    at java.lang.Integer.parseInt(Integer.java:481) 
    at java.lang.Integer.parseInt(Integer.java:531) 
    at java.sql.Date.valueOf(Date.java:200) 
    at oracle.jdbc.driver.OracleStatement.getDateValue(OracleStatement.java:4610) 
    at oracle.jdbc.driver.OracleResultSetImpl.getDate(OracleResultSetImpl.java:625) 
    at oracle.jdbc.driver.OracleResultSet.getDate(OracleResultSet.java:1601) 
    at quotecopy.DbConnection.getTableRows(DbConnection.java:127) 
    at quotecopy.QuoteCopier.main(QuoteCopier.java:66) 
+2

如果没有代码,我想你应该至少粘贴堆栈跟踪。 –

+2

列变量的类型是什么?显然它不是'ResultSetMetaData',因为方法'getColName'和'getDataType'没有被指定为接口中的方法。 –

+0

@Vineet Reynolds - Column是我的项目中用户定义的类。它在这种情况下无关紧要。它被错误粘贴,我从我的问题中删除了它。 – aquero

回答

4

您可以检查您的查询,我相信你正在使用的日期列to_char这是造成getDate无法将其识别为一个有效的Date

+0

Ooops ...那是造成错误...对不起,浪费宝贵的时间在这个...:D – aquero

0

rs.getString()或rs.getDate堆栈跟踪()获取基于数据库表的列名。你能否确认包含日期的列名为“月份名称”?

0

你可能想看看有几件事情:

  • 是列式数据库确实日期/日期此列?
  • 当你打印出来getObject()而不是getDate()会发生什么事?你能告诉我们输出吗?
  • 当您使用列索引检索日期,而不是使用列名会发生什么?
+0

1.是其2它只是打印出为前日期:17-MAY-11 3.我使用的列索引时,得到同样的错误 – aquero

0

根据所提供的信息,这将是值得检查的代码库以下情况:

  • 读一列,它是Oracle数据库DATE类型不。 The Oracle JDBC driver maps the Oracle database type DATE to the java.sql.Date type;实际上它是oracle.sql.Date类型,它是java.sql.Date类型的子类型。如果您没有阅读Oracle DATE类型的列,而是阅读TIMESTAMP字段,那么您可能会遇到该异常。因此,您必须使用合适的方法(可能为getTimeStamp)来读取列中的数据。
  • 在数据库中使用的NLS_DATE_FORMAT是从由JDBC驾驶员所期望的日期格式不同。这要么要求你改变在创建会话,using a logon trigger的NLS_DATE_FORMAT,否则会要求您使用TO_CHAR function calls在SQL查询适当日期格式。
  • 以随机方式访问ResultSet中的列。大多数JDBC驱动程序会希望您从第一列开始逐列读取结果集的内容,而不允许您忽略任何列。如果您尝试阅读专栏而忽略了以前的专栏,那么您可能会遇到此异常。
+0

1.数据类型以dB为日期2.我已经调试的代码,我可以证实,没有列被忽略 – aquero

+0

什么NLS_DATE_FORMAT? –

相关问题