Xin chào các bạn, tôi đang gặp một số vấn đề với các kết quả khớp chính xác trong khi thực hiện một lệnh NamedQuery.JAVA: Vấn đề về chuỗi tên miền được đặt tên
Tôi hiện đang sử dụng một cái gì đó như thế này:
@NamedQuery(name = MyClass.GET_ENTRY_BY_NAME, query = "select e from Entry e where e.name =:"+ Entry.NAME)
...
Query query = em.createNamedQuery(MyClass.GET_ENTRY_BY_NAME);
query.setParameter(Entry.NAME, myEntry.getName());
Nó hoạt động cho hầu hết các trường hợp, tuy nhiên tôi nhận thấy rằng trong trường hợp người sử dụng vượt qua tên tập tin với một khoảng trống ở cuối, các namedQuery bỏ qua nhân vật đó. Ví dụ:
Query query = em.createNamedQuery(MyClass.GET_ENTRY_BY_NAME);
query.setParameter(Entry.NAME, myEntry.getName()+ " ");
Sẽ trả lại kết quả tương tự như truy vấn trước đó. Bỏ qua xác thực 'mục nhập hợp lệ' của tôi. Nói cách khác, tôi muốn truy vấn trả về không có mục nào và xử lý lỗi sau này.
Một workaround tôi có thể nghĩ ra, là đặt dấu nháy đơn xung quanh tham số của tôi trong namedQuery, như thế này:
@NamedQuery(name = MyClass.GET_ENTRY_BY_NAME, query = "select e from entry e where e.name =':"+ Entry.NAME "'")
Tuy nhiên nó sẽ thùng rác mã của tôi trong trường hợp String chứa dấu nháy đơn trong nó .. .
Bất kỳ ý tưởng nào?
Hi axtavt, cảm ơn vì sự nhanh chóng trong câu trả lời! Vâng, cơ sở dữ liệu của tôi được đặt thành VARCHAR. Nhưng tôi không chắc chắn nếu phiên bản MySql có bất cứ điều gì để làm với vấn đề này. Tôi cũng nghĩ đến việc cắt bớt trước khi đặt tham số cho truy vấn, tuy nhiên tôi muốn phần mềm trả về lỗi cho bất kỳ thứ gì khác với cơ sở dữ liệu, đảm bảo rằng người dùng nhập chính xác những gì anh ta muốn. –
@flavio: Tôi không quen với MySQL, vì vậy không thể nói gì về các tính năng của nó. Cũng lưu ý rằng mẫu truy vấn của tôi trims giá trị được lưu trữ, không phải là tham số, do đó kết quả phải chính xác. – axtavt
Tôi đã sửa lỗi mã kiểm tra quá trình xây dựng Truy vấn ... Với mã bạn đã cung cấp, có vẻ như vấn đề nằm trong mySql. Tôi nhận thấy rằng cả hai tham số và mục cơ sở dữ liệu là khác nhau ... tuy nhiên đối với một số lực lượng thần bí không rõ MySql chỉ trims không gian và xem xét nó chính xác phù hợp ... Bây giờ tôi nghĩ rằng tôi có một số nghiên cứu để làm để xem nếu điều này là thực sự là một hành vi MySql mong đợi hoặc có cái gì đó khác đằng sau nó. Còn bây giờ tôi nghĩ tôi sẽ phải thực hiện một số kiểm tra bổ sung. Cảm ơn! –