我在我的数据库中使用以下数据类型。
但我得到例外的例外:
在线程“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();
});
答案 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类型。