我想使用prepareStatement来更新表。但输入可能是空值。通过使用IsNull,它只能应用于varchar,如何关于int,double?
我将收到一个json对象(只需要更新字段),例如:
{ {
price: 1.56 OR name: "aa", OR ...
} age:10
}
对于int和double,如果值没有设置,当我得到值时,它将返回0,当用户没有传递给我时,如何将其设置为null?
我的课程:
private String name;
private int age;
private double price;
//public get & set method
我的java:
strQuery = "UPDATE table SET name=IsNull(?, name), age=IsNull(?, age), price=IsNull(?, age) WHERE id= ?";
stmt = (PreparedStatement) conn.prepareStatement(strQuery);
stmt.setString(1, obj.getName()); //string
stmt.setString(2, obj.getAge()); //int
stmt.setString(3, obj.getPrice()); //double
stmt.setString(4, id);
我的问题:
如何捕获json输入,如果字段(int / double)不可用,则将其设置为null?
我尝试使用Double而不是double,它的工作,但我不确定这是不是好方法。 (我是一个完整的新手)
或其他任何最好的方式来做我想做的事情?
答案 0 :(得分:0)
您可以在设置参数时比较对象
stmt.setInt(2, obj.getAge() != 0 ? obj.getAge() : null);
stmt.setDouble(3, obj.getPrice() != 0 ? obj.getPrice() : null);
现在,正如您所说的使用Double它可以工作,因为在初始化期间,类对象默认被指定为null。但是,原始类型会被赋予默认值。例如,int-0,double-0.0,bool-false等。您可以查看更多信息。这两种方法都可以在设置参数时使用包装类或比较。但是比较好。