2011-06-30 57 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? –

相關問題