Giúp đỡ câu truy vấn

Dai su huynh

Member
14/5/15
97
14
8
32
Xin phép nhờ anh em xem qua code và sửa giúp mình : mình đang vướng ở chức năng tìm kiếm(với vài tham số) , đây là code :
PHP:
public List<Object> findSearch(String tenhd, String nguoichutri, java.util.Date tungay, java.util.Date denngay) {
        Session ss = sf.openSession();
        Transaction ts = ss.beginTransaction();
        try {
            Criteria cr = ss.createCriteria(Hoatdongcosodoan.class);
            if(tenhd != null && tenhd != ""){
                cr.add(Restrictions.like("tenhoatdong", "%"+tenhd+"%"));
            }
            if(nguoichutri != null && nguoichutri != ""){
                cr.add(Restrictions.eq("nguoichutri", nguoichutri));
            }
            cr.add(Restrictions.between("thoigian", tungay, denngay));
            ts.commit();
            return cr.list();
        } catch (Exception e) {
            ts.rollback();
            return null;
        }
    }
và lấy dữ liệu truyền vào ở đây :
PHP:
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                        
        // TODO add your handling code here:
        String tenhd = null;
        String chutri = null;
        tenhd = jTextFieldTenhoatdong.getText();
        chutri = jTextFieldNguoichutri.getText();
        java.util.Date tungay = jDateChooserTungay.getDate();
        java.util.Date denngay = jDateChooserDenngay.getDate();
        //
        hoatdongdoanDAO hd = new hoatdongdoanDAO();
        List<Object> lst = hd.findSearch(tenhd, chutri, tungay, denngay);
        ArrayList<Hoatdongcosodoan> dshd = (ArrayList) lst;
        loadSearch(dshd);
    }
khi tiến hành chạy tìm kiếm thì dòng này không thực hiện được :
if(tenhd != null && tenhd != ""){
cr.add(Restrictions.like("tenhoatdong", "%"+tenhd+"%"));
}

chỉ khi mình tìm kiếm theo "nguoichutri" có được kết quả rồi thì lọc tiếp theo trường "tenhd" mới lấy được kết quả.
 
Sửa lần cuối:

Dai su huynh

Member
14/5/15
97
14
8
32
Mình viết store procedure để thực hiện tìm kiếm theo vài cột trong mysql workbench, lỗi cú pháp chỗ này like '%'+@tenhd+'%', sửa thành "like @tenhd" thì ok nhưng kết quả không được như ý, ví dụ mình search theo @chutri = "Trọng" thì nó không ra kết quả mà phải gõ đủ là "Trọng lú" thì mới ok.
 

Dai su huynh

Member
14/5/15
97
14
8
32
Đổi
Restrictions.like("tenhoatdong", "%"+tenhd+"%")
Thành
Restrictions.like("tenhoatdong", tenhd, MatchMode.ANYWHERE).ignoreCase()
Dòng đấy không có sai, sai dòng ngay bên dưới thôi, mình phải đổi lại thành Restrictions.like("nguoichutri", "%"+nguoichutri+"%") thay vì Restrictions.eq ! không hiểu sao mà cái lệnh jtextFiledNguoichutri.gettext nó lấy kết quả thế nào mà đã có điều kiện là nguoichutri != "" mà vẫn ko đúng, dùng System.out.println thì như thế này : System.out.println("s:"+nguoichutri+"s") thì nó in ra s:s
 

Joe

Thành viên VIP
21/1/13
2,704
1,246
113
Dai Su Huynh,
don't be intimidated or feel insulted when I comment your codes.
PHP:
if(nguoichutri != null && nguoichutri != ""){
    cr.add(Restrictions.eq("nguoichutri", nguoichutri));
}
This kind of coding is the most primitive error that ONLY a bloody newbie can make, but you're no more a newbie. So far as I know you.
The basics of JAVA are
1) String is a pseudo-primitive when it's a pool string. A pool string is a string that is directly instantiated by 2 double quotes
PHP:
String pseudo = "I'm a pseudo string";
2) String is an object when it is a) instantiated by Constructor or b) a returned String of a method.
PHP:
String object = new String("I'm a pseudo string");
3) a pseudo strings can be compared directly, an object string can't !
4) string is a final object and is also immutable. Any reassignment always leads to an new hashcode (or reference).

If you don't master the most used java element like String then you'll have a lot of troubles to work with java for a complex application. People who tried to help you made the same basic mistake that they always looked for the "high-flying" problem, instead of the most basic thing like String, etc.
PHP:
public class EmptyString {
   public static void main(String[] args) throws Exception {
       String s0 = "";
       String s1 = new String("");
       String s2 = new String("I'm a pseudo string");
       String s3 = "I'm a pseudo string";
       System.out.println("s1 == \"\" is "+(s1 == "")+"\ns1.equals(\"\") is "+s1.equals("")+
                          "\ns2 == \"I'm a pseudo string\" is "+(s2 == "I'm a pseudo string")+
                          "\ns2.equals(\"I'm a pseudo string\") is "+s2.equals("I'm a pseudo string")+
                          "\ns0 == \"\" is "+(s0 == "")+
                          "\ns3 == \"I'm a pseudo string\" is "+
                          (s3 == "I'm a pseudo string"));

   }

}
the output is
Code:
C:\JoeApp\test>javac -g:none -d ./classes EmptyString.java

C:\JoeApp\test>java EmptyString
s1 == "" is false
s1.equals("") is true
s2 == "I'm a pseudo string" is false
s2.equals("I'm a pseudo string") is true
s0 == "" is true
s3 == "I'm a pseudo string" is true

C:\JoeApp\test>
so ,where is the basic error you have made in your above-given codes?
 
Sửa lần cuối:
  • Like
Reactions: Dai su huynh