Resultset.getDate()抛出异常java.lang.NumberFormatException:对于输入字符串:“Month of Month”

时间:2011-06-30 06:17:48

标签: java oracle jdbc

使用Resultset.getDate()从数据库中提取日期时,我收到以下异常:

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

我可以确认在尝试从Oracle date数据类型的列中获取数据时会抛出异常。

我不能在这里粘贴实际代码,因为它很长。但示例代码如下所示

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

请帮帮忙?

根据Sanjay的要求,请找到下面的堆栈跟踪

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)

5 个答案:

答案 0 :(得分:4)

您是否可以查看自己的查询,我相信您在“日期”列中使用的是to_char,导致getDate无法将其识别为有效Date

答案 1 :(得分:2)

答案 2 :(得分:0)

rs.getString()或rs.getDate()根据您的数据库表列名进行检索。您能否验证包含日期的列是否被命名为“月份名称”?

答案 3 :(得分:0)

您可能想要查看的一些内容:

  • 数据库中此列的列类型是否真的是日期/日期时间?
  • 打印getObject()而不是getDate()时会发生什么?你能告诉我们输出吗?
  • 使用列索引检索日期而不是使用列名时会发生什么?

答案 4 :(得分: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,或者要求您在SQL查询中使用具有适当日期格式的TO_CHAR function calls
  • 以随机方式访问ResultSet中的列。大多数JDBC驱动程序都希望您从第一列开始逐列读取结果集的内容,而不允许您忽略任何列。如果您在忽略之前的列时尝试读取列,则可能会遇到此异常。