SQL如何使用prepareStatement update指定带有IsNull的字段为int和double?

时间:2016-12-28 02:35:56

标签: java sql sql-server jdbc

我想使用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,它的工作,但我不确定这是不是好方法。 (我是一个完整的新手)

或其他任何最好的方式来做我想做的事情?

1 个答案:

答案 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等。您可以查看更多信息。这两种方法都可以在设置参数时使用包装类或比较。但是比较好。