我需要使用表的可空列上列的值選擇三個整數值中的一個。在SQL查詢中選擇值vs(Java)代碼
至少有兩種方法:1)使用SQL來完成所有工作:測試空值,並在其他值之間進行選擇;或者2)讀取值並使用代碼 - 在這種情況下Java可以選擇。
哪一個是「更好」的,即。更容易理解&更易維護?您是否有其他度量標準用於決定?
舉個例子,我有以下代碼:
// If id is equal to:
// -1, then make v = 1
// null, then make v = 2
// in any other case, make v = 3
// Option 1:
int v;
String query = "SELECT CASE min(Id) WHEN NULL THEN 2 WHEN -1 THEN 1 ELSE 3 END AS Id"
+ "FROM TableA WHERE SomeField IN (SELECT ...blah blah...)";
ResultSet rs = // execute query
if (rs.next()) {
v = rs.getInt("Id");
} else {
// TODO something went *very* wrong...
}
// Option 2:
int v;
String query = "SELECT CASE min(Id) Id"
+ "FROM TableA WHERE SomeField IN (SELECT ...blah blah...)";
ResultSet rs = // execute query
if (rs.next()) {
final int id = rs.getInt("Id");
if (rs.wasNull()) {
v = 2;
} else if (id == -1) {
v = 1;
} else {
v = 3;
}
} else {
// TODO something went *very* wrong...
}
我會去SQL如果查詢是不是很* *複雜(指執行在合理的時間)。如果查詢是10分鐘,最好嘗試java。但是,如果數據庫可以爲我完成這項工作,我總是會採用prefere sql方法。 –
@ThrashBean我並不是故意粗魯,但有人可能會爭辯說*系統中的很多工作都可以在數據庫中完成。我用巨大的老闆說他希望使用存儲過程來開發*所有* web應用程序:)但是,我將您關於查詢複雜性的評論作爲考慮的一個很好的指標。你是否介意將它作爲答案發布,以便我可以對它進行升級? –
給你。不要忘記檢查執行時間,只需在查詢前後添加一些currentTimeMillis即可。 –