数字格式异常:空

问题描述:

我使用以下我的数据库中的数据类型。数字格式异常:空

,但我得到异常的异常为:

螺纹

“线程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

你应该检查你的变量是否为空,并使用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

这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

使用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