数字格式异常:null

时间:2012-03-29 10:28:52

标签: java jdbc prepared-statement

我在我的数据库中使用以下数据类型。

但我得到例外的例外:

  

在线程“Thread-2”中java.lang.NumberFormatException:null

如何解决它

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();
});

3 个答案:

答案 0 :(得分:1)

这一行:

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

对空值调用parseInt将导致您获得NumberFormatException,data [1]将为null。

答案 1 :(得分:0)

您应该检查您的变量是否为null并使用PreparedStatement中的'setNull'方法。例如:

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

与其他类型相似的东西(VARCHAR等)。 Oracle正在尝试将您传递的值转换为它所期望的类型。在你的情况下,你有数字问题,但如果value为null,它可能会发生类似于String的事情。为此,您需要表明您要插入一个空值,如上所述。

答案 2 :(得分:0)

使用PreparedStatement.setObject()来避免这种异常。 JDBC自动将Object值转换为其对应的SQL类型。