2017-02-10 7 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(); 

} 

このコードを短く書くことはできますか?私は "if"声明を思い浮かべますか?Javaのif文

おそらくwhileループですか?

データベース内の一部のクライアントを検索するためのメソッド。このメソッドは動作しますが、このif文は書き込みを短くします。

おかげで解決しよう

EDIT:

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); 

EDIT

を、あなたが値を取得する時間などの処理を含めることができますklijentiFormEventオブジェクトから:

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

私の宣言のメソッド "public void searchKlijenta(KlijentiFormEvent klijentiFormEvent) "klijentiFormEventは私のフィールドからのデータです(String naziv = nazivField.getText()..)、あなたのコードは何をしたいのですか?チェックするのはSQL文の前でなければなりません。 ..iは何かのためのテキストフィールドが空であるなら、私はデータベースを検索するためのフォームを持っています。データベースのemtpyフィールドで検索したいとは思っていません。つまり、検索フォームにテキストを入力する必要があります.. – Hrvoje

+0

はい、 質問がありますが、何が良いですか? 1.メソッドを呼び出すソリューション:telefonK = returnNullIfEmptys(telefonK); または 2. nazivK =(nazivK.length()== 0)?ヌル:nazivK; – Hrvoje

+0

ロジックを繰り返さないので、最初の方が良いです。変更が必要な場合は、1か所で行う必要があります。 2番目の解決策の他に、 'nazivK'変数を3回繰り返します。つまり、新しいコントロールを追加するときは、既存の命令をコピーしてコピーし、変数名を3回変更する必要があります。エラーが発生しやすくなります。 – 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で提案されているように、array/listに値を入れてください。

/* 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; 
     } 
    }