Bất kỳ ai có thể nghĩ ra lý do hợp lý tại sao SQLException
là một ngoại lệ được kiểm tra?Tại sao SQLException là ngoại lệ được kiểm tra
Vâng, có thể là một lỗi cú pháp trong truy vấn
Vâng, kết nối có thể đã chết
Vâng, có thể là một vấn đề cho phép
Etc, vv blah blah blah
Nhưng thực tế 100% của thời gian (một khi bạn đang chạy trong sản xuất), không có bất kỳ vấn đề.
Nếu có sự cố, mã gọi điện thoại không thể thực hiện bất cứ điều gì để khôi phục, vì vậy lý do đó phải là không được chọn.
Được kiểm tra tạo khối lượng của các dấu hoa hồng try catch
trong suốt mã, vì bất kỳ ai đã tham gia vào dự án sử dụng JDBC sẽ chứng thực. Sự lộn xộn mã là đáng kể.
Vì tính chất bí truyền của SQL, vô số lý do bạn có thể nhận được SQLException và độ phức tạp của chúng có nghĩa là bạn không thể phục hồi, trừ khi ngoại lệ là do sự cố mạng tạm thời, nhưng ngay cả khi có cuộc gọi đồng bộ, bạn đang bị chìm bởi vì bạn không thể chờ đợi vô thời hạn cho vấn đề mạng được giải quyết, vì vậy bạn sẽ phải thất bại trong giao dịch.
Thông thường, gọi SQL trông như thế này:
try {
// make some SQL call(s)
} catch {SQLException e) {
// log the exception
return; // and give up
}
đang như vậy thêm không có giá trị. Không có gì hợp lý bạn có thể làm để phục hồi. Bạn cũng có thể để bong bóng ngoại lệ thời gian chạy lên - tức là SQLException phải là một ngoại lệ thời gian chạy (không được chọn).
A) Mạng, máy chủ cơ sở dữ liệu, cân bằng tải, v.v. không có thời gian tăng 100% B) Bạn chắc chắn nhất có thể làm điều gì đó khi xảy ra lỗi. –
Máy chủ không xảy ra thường xuyên hơn bạn mong đợi và là thứ mà khách hàng sẽ xử lý. (Rất có thể, bằng cách hiển thị thông báo lỗi và thử lại sau). Chủ yếu là với các vấn đề bế tắc. – MTilsted
@BrianRoach OK - nói rằng mạng sẽ biến mất. Mã gọi điện thoại có thể làm gì để đưa mạng trở lại? Không có gì! Vì vậy, một lần nữa, tại sao nó được kiểm tra? Kiểm tra ngụ ý rằng người gọi có thể phục hồi. – Bohemian