2017-02-10 2 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 루프를 통해?

데이터베이스에서 일부 클라이언트를 검색하는 데 사용되는 방법. 이 방법은 작업 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 = naziv = nazivField.getText() ..), 그래서 귀하의 코드가 내가 원하는 .. 확인하지 대부분의 sql 문을 전에 ... ..i 검색 클라이언트에 대한 양식을 가지고 뭔가 텍스트 필드가 비어 있다면 내가 데이터베이스 emtpy 필드 즉 검색 양식에 텍스트를 입력해야합니다 searh 싶어요. – Hrvoje

+0

그래, 지금 고마워요. 질문이 있습니다. 무엇이 더 좋습니까? 1. 메서드 호출 방법 : telefonK = returnNullIfEmptys (telefonK); 또는 2. nazivK = (nazivK.length() == 0)? null : nazivK; – Hrvoje

+0

논리를 반복하지 않기 때문에 첫 번째 방법이 더 좋습니다. 변경해야 할 경우 한 곳에서해야합니다. 두 번째 솔루션 외에도'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에서 제안했듯이 값을 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; 
     } 
    }