包装类insert到数据库表空字段报空指针异常

pojo 里面对应表的属性为Integer,数据库表字段某一字段指定可以为空,不给该属性赋值,当用insert语句添加数据进入该表时,报空指针异常,是为什么?

Servlet给该对象设值:
Productorderitem productorderitem = new Productorderitem();
productorderitem.setProductorderitemNumber(Integer.parseInt(product_number));
productorderitem.setProductorderitemSize(ProductSizeUtil.getSizeByString(product_size));
productorderitem.setProductorderitemPrice(product.getProductPrice());
productorderitem.setProductorderitemProductId(Integer.parseInt(productId));

dao层实现类的方法代码:
public boolean insertProductorderItem(Productorderitem productorderitem, Connection conn) throws Exception {
String sql = "insert into productorderitem(productorderitem_number,productorderitem_size,productorderitem_price,productorderitem_product_id,productorderitem_order_id,productorderitem_user_id,productorderitem_userMessage) values(七个?)";
PreparedStatement ps = conn.prepareStatement(sql);
ps.setInt(1, productorderitem.getProductorderitemNumber());
ps.setInt(2, productorderitem.getProductorderitemSize());
ps.setDouble(3, productorderitem.getProductorderitemPrice());
ps.setInt(4, productorderitem.getProductorderitemProductId());
ps.setInt(5, productorderitem.getProductorderitemOrderId());
ps.setInt(6, productorderitem.getProductorderitemUserId());
ps.setString(7, productorderitem.getProductorderitemUserMessage());
int row = ps.executeUpdate();
if(row>0){
return true;
}
DBHelper.closePreparedStatement(ps);
return false;
}

错误位置可以定位吗
是不是你integer类型数据赋值取值时候的问题
在赋值取值前判断一下是不是为空或者null
为空或者null时不进行赋值取值


productorderitem.setProductorderitemNumber(Integer.parseInt(product_number))

ps.setInt(1, productorderitem.getProductorderitemNumber());

https://blog.csdn.net/weixin_48240945/article/details/120323300

https://blog.csdn.net/weixin_43080383/article/details/120709831

可以给数据库中 对应表的字段 设置默认值 比如为 0 ,这样插入的时候可以写该字段 ,如果后台代码逻辑需要赋值的话字段也要定义为int 类型 这样 空字符串你就是赋值也会编译不通过

原代码
productorderitem.setProductorderitemProductId(Integer.parseInt(productId));
将上面这一行代码修改为下面
if(productId == null){
productorderitem.setProductorderitemProductId(0);
}else {
productorderitem.setProductorderitemProductId(Integer.parseInt(productId));
}

当一个数是null的时候不能使用Integer.parseInt()方法,这样会报错,例如下面的例子直接将null放入到Integer.parseInt()中转换就会报错空指针异常

img

你这两个错了

img


空值不能直接转换,拿空值转换就会报空指针异常,你把我截图的这两个改了就行了,如果说这两个字段值有可能是为空你可以这样处理Integer.parseInt(product_number, 0);在转换的时候如果是空默认给0或者加一个判断当product_number这个值不为空的时候在转换,你第二个转换的也一样的方法处理即可。希望对你有帮助。如果有不清楚的可以提问。