2012-03-29 49 views
0

我使用以下我的數據庫中的數據類型。數字格式異常:空

,但我得到異常的異常爲:

螺紋

「線程2」 java.lang.NumberFormatException:空

如何解決它

btn.addActionListener(new ActionListener() 
{ 
    Thread thread= new Thread() 
    { 
     public void run() 
     { 
      Connection con= conn.getconnection(); 
      get_data(); 
      String Query = " INSERT INTO employees (Id, 
           P_F_No, 
           Name, 
           Date, 
           Guard/LP/ALP, 
           Incomming_Train, 
           Sign_off, 
           Room_Bed_No, 
           Out_going_train_time, 
           Sign_on, 
           subisezed_meal) 
           VALUES 
           (?,?,?,?,?,?,?,?,?,?,?)"; 

      try 
      { 
       PreparedStatement pr = con.prepareStatement(Query); 
       pr.setString(1,data[0]); 
       pr.setInt(2,Integer.parseInt(data[1])); 
       pr.setString(3,data[2]); 
       pr.setDate(4,Date.valueOf(data[3])); 
       pr.setString(5,data[4]); 
       pr.setTime(6,Time.valueOf(data[5])); 
       pr.setTime(7,Time.valueOf(data[6])); 
       pr.setString(8,data[7]); 
       pr.setTime(9,Time.valueOf(data[8])); 
       pr.setTime(10,Time.valueOf(data[9])); 
       pr.setString(11,data[10]); 
       pr.executeUpdate(); 
      } 
      catch (SQLException ex) 
      { 
       System.out.println(ex); 
      } 
     } 
    }; 

    thread.start(); 
}); 
+0

問題在於'data'的內容 - 你需要打印出來,看看上面哪個字段不會被解析爲指定的類型。 – Nim 2012-03-29 10:30:41

+0

請張貼你的表格結構。你確定id是一個字符串嗎? – 2012-03-29 10:31:28

+0

(ID =文本 ,P_F_No =數字 ,名稱=文本, 日期=日期, 後衛/ LP/ALP =文本, Incomming_Train =時間, Sign_off =時間, Room_Bed_No =文本, Out_going_train_time = DTAE, Sign_on = time, subisezed_meal = text)這是表結構,它包含第一個字段作爲Sr.它的自動編號 – Pranali 2012-03-29 12:41:16

回答

0

你應該檢查你的變量是否爲空,並使用PreparedStatement的'setNull'方法。例如:

if (data[0] == null) 
    pr.setNull(1, Types.INTEGER); 
else 
    pr.setInt(1,data[0]); 

其他類型的東西(VARCHAR等)。 Oracle正試圖將您傳遞的值轉換爲它期望的類型。在你的情況下,你有數字問題,但如果值爲null,它可能會發生與String相似的情況。爲此,您需要指出您希望如上所述插入空值。

+0

我的數據是不是null我對這個值的那場,但和數據類型輸入值是數據庫 – Pranali 2012-03-29 10:41:49

+0

號碼所以,你需要仔細檢查,是不是空的,在打印的@Nim建議。無論如何,請記住我的代碼,如果可能發生值爲空。 – jddsantaella 2012-03-29 10:45:05

+0

你說什麼是寫,但現在現在他們是問題發生與我的數據類型我能夠檢索日期值我有以下錯誤線程「線程-3」異常java.lang.IllegalArgumentException at java.sql.Date.valueOf( Date.java:103) at third.addition_of_records $ 1 $ 1.run(addition_of_records.java:104) – Pranali 2012-03-29 11:19:04

1

這line:

pr.setInt(2,Integer.parseInt(data[1]));

在空值上調用parseInt將導致NumberFormatException異常,data [1]將爲null。

+0

我知道我得到了該行的異常,但我傳遞了該字段的值 – Pranali 2012-03-29 10:42:52

+0

我同意@Derek 。根據[文檔](http://docs.oracle.com/javase/6/docs/api/java/lang/Integer.html#parseInt(java.lang.String中))的參考值必須是'null'。因此,可能試着打印data [1]的值並檢查它是否正確。 – radimpe 2012-03-29 11:53:35

0

使用PreparedStatement.setObject(),以避免這類異常。 JDBC會自動將Object值轉換爲其對應的SQL類型。

+0

http://docs.oracle.com/javase/6/docs/api/java/sql/PreparedStatement.html#setObject(int,java.lang.Object) – vinodn 2012-03-29 10:56:04

+0

if I使用preparedsatement.getString(index,value);那麼沒關係? – Pranali 2012-03-29 12:25:23

+0

我使用了setString,但現在我得到了錯誤,因爲插入語句中的語法錯誤是他們需要將值放在問號的位置。 – Pranali 2012-03-29 12:26:45