2017-02-10 103 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; 
     } 
    }