2013-05-06 38 views
5

Tôi có một câu lệnh SQL mà tôi mong đợi sẽ trả về một hàng, bởi vì tôi đang chuyển khóa chính. Vì vậy, lựa chọn của tôi là đểTôi có nên bắt EmptyResultDataAccessException không?

  1. queryForObject trong một try/catch, bắt EmptyResultDataAccessException, và trở về vô
  2. Thay đổi cuộc gọi đến queryForList và unwrap Danh mục và (hy vọng) trả lại 1 hoặc null.

Tôi đã đọc một nơi nào đó là cathing là EmptyResultDataAccessException, vì nó mở rộng ngoại lệ thời gian chạy, là một thực hành không tốt.

Nhưng tôi không thể thấy bất kỳ điều gì sai trái với nó.

Tôi muốn nghe ý kiến ​​

+0

Nếu bạn đang chuyển một khóa chính thì làm thế nào nó trở lại trống? –

+1

Vâng, nó không phải, và nó không bao giờ nên làm như vậy. "Nên" là từ khóa ở đây. – EdgeCase

Trả lời

1

Hầu hết thời gian tôi đã chạy vào điều này (mvc/ws) Tôi để ngoại lệ được ném nhưng xử lý ngoại lệ trong một trình giải quyết ngoại lệ. Vấn đề với trả về null là một ứng dụng phụ thuộc vào nó và tiếp tục xuống con đường và bạn sẽ phải làm một kiểm tra null sau này chứ không phải tại thời điểm nó được mong đợi ở đó. Điều này có thể gây ra vấn đề bởi vì không phải tất cả các nhà phát triển có thể thực hiện kiểm tra null khi được yêu cầu và sau đó bạn có thể chạy vào npe sau này. Tùy thuộc vào loại ứng dụng bạn đang viết có một số cách để nắm bắt và xử lý ngoại lệ bằng cách sử dụng trình giải quyết ngoại lệ. Bằng cách sử dụng trình giải quyết ngoại lệ, bạn có thể xử lý từng ngoại lệ khác nhau và cung cấp phản hồi cho người dùng.

Đây là một cách để làm điều đó bằng cách sử dụng mvc mùa xuân. Bằng cách này, bạn có thể đặt một thông báo chung cho người dùng nếu đối tượng có khóa chính không tồn tại. http://www.mkyong.com/spring-mvc/spring-mvc-exception-handling-example/

1

Tôi nghĩ hoàn toàn có thể chấp nhận được ngoại lệ đó. Đó là ngoại lệ mùa xuân duy nhất tôi bắt được mà tôi có thể nhớ lại, nhưng tôi có các trường hợp sử dụng hợp lệ để cố gắng tìm một bản ghi có khả năng không tồn tại.

Các vấn đề liên quan