簡體   English   中英

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

[英]SQL how to use prepareStatement update specify fields with IsNull for int and double?

我想使用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,這是有效的,但我不確定這是不是好方法。 (我是一個完整的新手)

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

您可以在設置參數時比較對象

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等。您可以查看更多信息。 這兩種方法都可以在設置參數時使用包裝類或比較。 但是比較好。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM