0

助けてください、私は小さな Java + mysql プロジェクトを持っています。人の名前を検索するプログラムです。名前を入力できる検索ボックスと、実行する「GO」ボタンがあります。私は検索できます:

santiago,martin <--- in this format. my problem is i cant search the following formats:

santiago  <-- input only lastname
 santiago <-- input with space before the lastname. 

これが私のコードです。教えてください。私は自分のコードが良くないことを知っています。またはこれをより効率的にするための提案。

String memberToFind = inSearchBar.getText();
    String[] memberToFindParts = memberToFind.split("\\,");
    String memberName0 = memberToFindParts[0];
    String memberName1 = memberToFindParts[1];
    int namelength = memberToFindParts.length;

    if(namelength!=0){
        String sql = "SELECT (accountNo) AS 'Account No',"
        + "(lastname)AS 'Lastname',"
        + "(firstname)AS 'Firstname'"
        + "FROM cmje.membertable "
        + "WHERE   ((accountno)LIKE '%"+memberName0+"%' OR "
                + " (accountno)LIKE '%"+memberName1+"%' OR "
                + " (lastname)LIKE '%"+memberName0+"%' OR "
                + " (lastname)LIKE '%"+memberName1+"%' OR "
                + " (firstname)LIKE '%"+memberName0+"%' OR "
                + " (firstname)LIKE '%"+memberName1+"%')"
                + " ORDER BY lastname DESC;";           

        try{
                pst = sqlconn.prepareStatement(sql);
                rs = pst.executeQuery();
                masterListTable.setModel(DbUtils.resultSetToTableModel(rs));
                    }catch(Exception e){
                        JOptionPane.showMessageDialog(null, e);
                    }
    }else if(namelength==0){
        String sql = "SELECT (accountNo) AS 'Account No',"
        + "(lastname)AS 'Lastname',"
        + "(firstname)AS 'Firstname'"
        + "FROM cmje.membertable "
        + "WHERE   ((accountno)LIKE '%"+memberToFind+"%' OR "
                + " (lastname)LIKE '%"+memberToFind+"%' OR "
                + " (firstname)LIKE '%"+memberToFind+"%')"
                + " ORDER BY lastname DESC;";


        try{
                pst = sqlconn.prepareStatement(sql);
                rs = pst.executeQuery();
                masterListTable.setModel(DbUtils.resultSetToTableModel(rs));
                    }catch(Exception e){
                        JOptionPane.showMessageDialog(null, e);
                    }
    }
4

2 に答える 2

0

入力文字列をトリミングする必要があります。

String memberToFind = inSearchBar.getText().trim();
于 2013-09-13T18:14:23.883 に答える
0

santiago <--姓の前にスペースを入れて入力します。

この変更を行うことで、これを簡単に解決できます。

String memberToFind = inSearchBar.getText().trim();

サンティアゴ <-- 姓のみ入力

の数に応じて、複数の検索モードを実装する必要がありmemberToFindPartsます。ユーザーの入力が名字なのか姓なのかがわからないため、両方の結果を表示する必要があると思います。

String[] memberToFindParts = memberToFind.split("\\,");
if(memberToFindParts.length == 2) {
    /*
     * search by fullname
     */
} else if(memberToFindParts == 1) { // Note currently you have namelenght==0 here and that's wrong
    /*
     * search by firstname and lastname separately
     */
} else {
    // input unexpected (0 or more than 2 words)
}
于 2013-09-13T18:19:27.007 に答える