2017-02-10 99 views
1
public void searchKlijenta(KlijentiFormEvent klijentiFormEvent) throws SQLException { 

    String nazivK = klijentiFormEvent.getNaziv(); 
    String adresaK = klijentiFormEvent.getAdresa(); 
    String gradK = klijentiFormEvent.getGrad(); 
    String drzavaK = klijentiFormEvent.getDrzava(); 
    String telefonK = klijentiFormEvent.getTelefon(); 
    String faxK = klijentiFormEvent.getFax(); 
    String mailK = klijentiFormEvent.getMail(); 
    String mobitelK = klijentiFormEvent.getMobitel(); 
    String oibK = klijentiFormEvent.getOib(); 
    String ugovorK = klijentiFormEvent.getUgovor(); 
    String osobaK = klijentiFormEvent.getOsoba(); 

    if (nazivK.length() == 0) 
     nazivK = null; 
    if (adresaK.length() == 0) 
     adresaK = null; 
    if (gradK.length() == 0) 
     gradK = null; 
    if (drzavaK.length() == 0) 
     drzavaK = null; 
    if (telefonK.length() == 0) 
     telefonK = null; 
    if (faxK.length() == 0) 
     faxK = null; 
    if (mailK.length() == 0) 
     mailK = null; 
    if (mobitelK.length() == 0) 
     mobitelK = null; 
    if (oibK.length() == 0) 
     oibK = null; 
    if (ugovorK.length() == 0) 
     ugovorK = null; 
    if (osobaK.length() == 0) 
     osobaK = null; 


    klijentiSearchModel.clear(); 

    String sql = "select * from zavrsni.klijenti where naziv like '"+nazivK+"' or adresa like '"+adresaK+"' or grad like '"+gradK+"' or drzava like '"+drzavaK+"' or telefon like '"+telefonK+"' or fax like '"+faxK+"' or mail like '"+mailK+"' or mobitel like '"+mobitelK+"' or oib like '"+oibK+"' or ugovor like '"+ugovorK+"' or osoba like '"+osobaK+"' "; 
    Statement selectStmt = con.createStatement(); 
    ResultSet result = selectStmt.executeQuery(sql); 

    while(result.next()) { 
     int id = result.getInt("id"); 
     String naziv = result.getString("naziv"); 
     String adresa = result.getString("adresa"); 
     String grad = result.getString("grad"); 
     int posBr = result.getInt("posBr"); 
     String drzava = result.getString("drzava"); 
     String telefon = result.getString("telefon"); 
     String fax = result.getString("fax"); 
     String mail = result.getString("mail"); 
     String mobitel = result.getString("mobitel"); 
     String oib = result.getString("oib"); 
     String ugovor = result.getString("ugovor"); 
     String osoba = result.getString("osoba"); 

     KlijentiModelSearch klijentSearch = new KlijentiModelSearch(id, naziv, adresa, grad, posBr, drzava, telefon, fax, mail, mobitel, oib, ugovor, osoba); 
     klijentiSearchModel.add(klijentSearch); 
    } 

    result.close(); 
    selectStmt.close(); 

} 

我可以寫這段代碼嗎?我想到「如果」的說法?Java if語句

也許通過while循環?

用於在數據庫中搜索某個客戶端的方法。這種方法工作fane但這個if語句我想寫得更短。

感謝

編輯解決:

public void traziKlijenta(KlijentiFormEvent klijentiFormEvent) throws SQLException { 

    String nazivK = returnNullIfEmptys(klijentiFormEvent.getNaziv()); 
    String adresaK = returnNullIfEmptys(klijentiFormEvent.getAdresa()); 
    String gradK = returnNullIfEmptys(klijentiFormEvent.getGrad()); 
    String drzavaK = returnNullIfEmptys(klijentiFormEvent.getDrzava()); 
    String telefonK = returnNullIfEmptys(klijentiFormEvent.getTelefon()); 
    String faxK = returnNullIfEmptys(klijentiFormEvent.getFax()); 
    String mailK = returnNullIfEmptys(klijentiFormEvent.getMail()); 
    String mobitelK = returnNullIfEmptys(klijentiFormEvent.getMobitel()); 
    String oibK = returnNullIfEmptys(klijentiFormEvent.getOib()); 
    String ugovorK = returnNullIfEmptys(klijentiFormEvent.getUgovor()); 
    String osobaK = returnNullIfEmptys(klijentiFormEvent.getOsoba()); 

    klijentiSearchModel.clear(); 

    String sql = "select * from zavrsni.klijenti where naziv like '%"+nazivK+"%' or adresa like '%"+adresaK+"%' or grad like '%"+gradK+"%' or drzava like '%"+drzavaK+"%' or telefon like '%"+telefonK+"%' or fax like '%"+faxK+"%' or mail like '%"+mailK+"%' or mobitel like '%"+mobitelK+"%' or oib like '%"+oibK+"%' or ugovor like '%"+ugovorK+"%' or osoba like '%"+osobaK+"%' "; 
    Statement selectStmt = con.createStatement(); 
    ResultSet result = selectStmt.executeQuery(sql); 

    while(result.next()) { 
     int id = result.getInt("id"); 
     String naziv = result.getString("naziv"); 
     String adresa = result.getString("adresa"); 
     String grad = result.getString("grad"); 
     int posBr = result.getInt("posBr"); 
     String drzava = result.getString("drzava"); 
     String telefon = result.getString("telefon");  
     String fax = result.getString("fax"); 
     String mail = result.getString("mail"); 
     String mobitel = result.getString("mobitel"); 
     String oib = result.getString("oib"); 
     String ugovor = result.getString("ugovor"); 
     String osoba = result.getString("osoba"); 

     KlijentiModelSearch klijentSearch = new KlijentiModelSearch(id, naziv, adresa, grad, posBr, drzava, telefon, fax, mail, mobitel, oib, ugovor, osoba); 
     klijentiSearchModel.add(klijentSearch); 
    } 

    result.close(); 
    selectStmt.close(); 

} 
private String returnNullIfEmptys(String value) { 
    if (value == null || value.length() == 0) { 
     return null; 
    } 
    return value; 
} 
+0

執行變量都有一個共同的類型,例如'String': 例如,你可以像這樣(我想這些值都是字符串)呢? – Socowi

+0

'nazivK = nazivK.length()== 0? null:nazivK'等等? – oruckdeschel

+3

如果你的變量是在一個列表或數組中,而不是單獨命名的,你可以在循環中完成所有操作。或者,您可以編寫一個方法'nullIfEmpty'並編寫'nazivK = nullIfEmpty(nazivK);'等 – khelwood

回答

4

與您的實際代碼,在您的評論的問題@khelwood命題是最好的辦法。
其他解決方案會產生開銷並改變您的設計而不帶來附加價值。

public static String returnNullIfEmpty(String value){ 
    if (value == null || value.length() == 0){ 
     return null; 
    } 
    return value; 
} 

然後就可以調用它以這樣的方式

nazivK = returnNullIfEmpty(nazivK); 
adresaK= returnNullIfEmpty(adresaK); 

編輯

你的問題的編輯,你可以包括處理,在那裏你檢索值時來自klijentiFormEvent對象:

String nazivK = returnNullIfEmpty(klijentiFormEvent.getNaziv()); 
String adresaK = returnNullIfEmpty(klijentiFormEvent.getAdresa()); 
... 
+0

我的方法聲明「public void searchKlijenta(KlijentiFormEvent klijentiFormEvent) 「klijentiFormEvent是從我的現場數據(字符串naziv = nazivField.getText()..),讓你的代碼不要讓我want..check大部分是之前SQL statement..null大部分是在SQL語句if if語句運行..我有形式的搜索客戶端我的數據庫,如果文本框的東西是空的,我不想在搜索表單數據庫emtpy場即searh必須鍵入一些文字.. – Hrvoje

+0

是的,這現在的工作表示感謝。 我有問題,有什麼更好的? 1.你的溶液來調用方法:telefonK = returnNullIfEmptys(telefonK); 或 2. nazivK =(nazivK.length()== 0)? null:nazivK; – Hrvoje

+0

第一個更好,因爲你不重複邏輯。如果你必須改變它,你必須在一個地方做。除了第二種解決方案之外,您還會重複3次'nazivK'變量。這意味着當你添加一個新的控件時,你必須複製粘貼一個已經存在的指令並改變三次變量名稱。它更容易出錯。 – davidxxx

0

您只需把你的陣列/列表...不管那些東西......到另一個數組或列表。

然後你迭代該數組/列表。

完成。

並提示:你的命名可以大大改善。你的名字應該表明變量背後的「事物」是什麼。

0

你也可以使用Map<String, List<?>>來存儲你的列表/數組/字符串。例如用List

Map<String, List<?>> map = new HashMap<>(); 
    map.put("nazivK", new ArrayList<>()); 
    map.put("adresaK", new ArrayList<>()); 
    //..... 
    //replace all lists with null 
    map.replaceAll((s, list) -> list.isEmpty() ? null : list); 

    //or just remove it 
    for(Iterator<Map.Entry<String, List<?>>> it = map.entrySet().iterator(); it.hasNext();) { 
     Map.Entry<String, List<?>> entry = it.next(); 
     if(entry.getValue().isEmpty()) { 
      it.remove(); 
     } 
    } 
0

正如GhostCat所建議的那樣,將您的值放入數組/列表中。

/* Order in array nazivK, adresaK, gradK, drzavaK, telefonK, 
    faxK, mailK, mobitelK, oibK, ugovorK, osobaK */ 
    String values[] = new String[11]; 
    for (String val: values) { 
     if (val == null || val.length() == 0) { 
      val = null; 
     } 
    }