Java SQL如何使用prepareStatement update为int和double指定带IsNull的字段?
我想使用prepareStatement更新表。但是输入可能是空值。通过使用IsNull,它只能应用于varchar,int和double如何 我将收到一个json对象(只需要更新字段),例如: 对于int和double,如果没有设置该值,当我得到该值时,它将返回0,当用户没有传递给我时,如何将其设置为null 我的班级:Java SQL如何使用prepareStatement update为int和double指定带IsNull的字段?,java,sql,sql-server,jdbc,Java,Sql,Sql Server,Jdbc,我想使用prepareStatement更新表。但是输入可能是空值。通过使用IsNull,它只能应用于varchar,int和double如何 我将收到一个json对象(只需要更新字段),例如: 对于int和double,如果没有设置该值,当我得到该值时,它将返回0,当用户没有传递给我时,如何将其设置为null 我的班级: private String name; private int age; private double price; //public get & set meth
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,这很有效,但我不确定这是不是好方法。(我完全是个新手)
或者其他任何我想做的最好的方法?您可以在设置参数时比较对象
stmt.setInt(2, obj.getAge() != 0 ? obj.getAge() : null);
stmt.setDouble(3, obj.getPrice() != 0 ? obj.getPrice() : null);
现在,正如您使用Double所述,它可以工作,因为类对象在初始化期间默认分配为null。但是,基本类型会被指定默认值。e、 g、int-0、double-0.0、bool-false等。您可以查看更多信息。这两种方法都可以在设置参数时使用包装类或比较。但是比较更好。您可以在设置参数时比较对象
stmt.setInt(2, obj.getAge() != 0 ? obj.getAge() : null);
stmt.setDouble(3, obj.getPrice() != 0 ? obj.getPrice() : null);
现在,正如您使用Double所述,它可以工作,因为类对象在初始化期间默认分配为null。但是,基本类型会被指定默认值。e、 g、int-0、double-0.0、bool-false等。您可以查看更多信息。这两种方法都可以在设置参数时使用包装类或比较。但是比较更好。你怎么知道值
0
应该表示null
,而不是实际值0
?这似乎是问题的核心。在这种情况下,开关使用Double和Integer,如果不指定,则设置为null。我们不能认为0是空的,但是您可以选择一些临时值(Doul .Max值和整数.Max值),如果您真的想使用原语,则设置为默认值。但最好是使用object(Double/Integer)。这就是我评论的重点:您的答案没有(现在仍然没有)真正解决问题。如果您有更好的解决方案。请邮寄。此解决方案解决了设置null的要求。我看不到任何缺陷。您如何知道值0
应该表示null
,而不是实际的0
?这似乎是问题的核心。在这种情况下,开关使用Double和Integer,如果不指定,则设置为null。我们不能认为0是空的,但是您可以选择一些临时值(Doul .Max值和整数.Max值),如果您真的想使用原语,则设置为默认值。但最好是使用object(Double/Integer)。这就是我评论的重点:您的答案没有(现在仍然没有)真正解决问题。如果您有更好的解决方案。请邮寄。此解决方案解决了设置null的要求,我看不出任何缺陷。如果您想知道null值,应该使用Integer
和Double
。顺便说一句:这似乎不是一个SQL或JDBC的问题,而是一个如何映射JSON的问题。您可以共享类的代码吗?该类的实例是obj
表示的?似乎您应该使用空对象模式表示和标识未初始化的字段。如果您想知道空值,应该使用Integer
和Double
。顺便说一句:这似乎不是一个SQL或JDBC的问题,而是一个如何映射JSON的问题。您可以共享类的代码吗?该类的实例是obj
表示的?似乎应该使用null对象模式表示和标识未初始化的字段。