2010-04-27 37 views
6

Khi tôi gọi một câu lệnh SQL thông qua JDBC trên DB2 và báo cáo kết quả thất bại, tôi bắt một SQLException với văn bản thông báo sau:Làm thế nào để nhận được thông báo lỗi mô tả từ DB2?

com.ibm.db2.jcc.a.nn: DB2 SQL Error: SQLCODE=-206, SQLSTATE=42703, 
    SQLERRMC=O.METADATENSATZ, DRIVER=3.52.95 

tôi đã cố gắng một bản dịch tự động của thông điệp theo error list published by IBM, nhưng có là các trình giữ chỗ bên trong các thông báo tham chiếu đến các yếu tố khác của ngoại lệ.

Trong khi tìm kiếm các yếu tố này bên trong ngoại lệ, tôi đã tìm thấy DB2ExceptionFormatter và cố gắng sử dụng nó để truy cập các yếu tố bị thiếu.

Nhưng ở đây tôi dừng lại, bởi vì DB2ExceptionFormatter đã cho tôi một đầu mối: xảy ra

Lỗi trong khi cố gắng để có được nội dung tin nhắn từ máy chủ. Chỉ có thẻ thông báo có sẵn.

Vì vậy, câu hỏi của tôi là: Tôi phải định cấu hình để nhận các thông điệp chính xác từ máy chủ DB2?

Nếu tôi có thể nhận được thư có thể đọc được từ máy chủ, tôi có thể sử dụng nó trực tiếp và không phải tự dịch nó.

+0

Để trả lời câu hỏi đó, sẽ rất hữu ích nếu bạn biết phiên bản và hệ thống DB2 (LUW, z/OS, AS400, v.v.) mà bạn đang sử dụng. –

Trả lời

6

Tôi không chắc chắn những gì tham khảo thông điệp mà bạn đang tìm kiếm ở trên (có vẻ như là iSeries) nhưng bạn nên đi đến thông báo DB2 tham khảo trên here

Nhìn lên SQL0206 được chúng tôi this page, với các thông tin sau:?.

tên không hợp lệ trong ngữ cảnh được sử dụng.

Các SQLERRMC là "O.METADATENSATZ" vì vậy tôi sẽ thực hiện việc này để có nghĩa là bạn đã gửi một câu lệnh SQL với DB2 và nó được báo cáo rằng "O.METADATENSATZ" là không hợp lệ ... một trong hai cột doesn' t tồn tại hoặc bảng "O" không tồn tại.

Khi message reference tiểu bang, nếu bạn muốn tự động dịch các thông báo lỗi DB2:

Để gọi nhắn giúp đỡ, mở bộ xử lý dòng lệnh và nhập:

? XXXnnnnn

trong đó XXX thể hiện tiền tố thư hợp lệ và nnnnn đại diện cho số thư hợp lệ.

Văn bản thư được liên kết với giá trị SQLSTATE đã cho có thể được truy xuất bằng cách phát hành:

? nnnnn

hoặc

? nn

trong đó nnnnn là năm chữ số SQLSTATE (chữ số) và nn là mã lớp SQLSTATE gồm hai chữ số (hai chữ số đầu tiên của giá trị SQLSTATE).

Trong trường hợp của bạn, nhập "? SQL0206" trong DB2 CLP sẽ nhận được thông báo lỗi.

+0

+1 để chỉ cho tôi danh sách SQLSTATE tốt hơn. – tangens

3

Tôi tìm thấy một gợi ý here:

retrieveMessagesFromServerOnGetMessage:

Chỉ định liệu các cuộc gọi JDBC SQLException.getMessage gây ra trình điều khiển IBM DB2 cho JDBC và SQLJ để gọi một DB2 cho thủ tục z/OS lưu trữ truy xuất nội dung tin nhắn cho lỗi. Kiểu dữ liệu của thuộc tính này là boolean. Giá trị mặc định là false, có nghĩa là toàn bộ văn bản tin nhắn không được trả lại cho máy khách.


tôi đã cố gắng này, nhưng đầu ra của sqlException.getMessage() chỉ thay đổi để

O.METADATENSATZ 

mà không cần bất kỳ nội dung bài viết xung quanh.


Bây giờ tôi thấy this:

Trước khi bạn có thể sử dụng chức năng nhất định của trình điều khiển IBM® Data Server dành cho JDBC và SQLJ trên DB2® cho hệ thống phụ z/OS®, bạn cần phải cài đặt một tập hợp các thủ tục được lưu trữ và tạo một bộ bảng.

...

WLM phải được cài đặt trên hệ thống z/OS.

WLM là DB2 Workload Manager mà không có sẵn cho phiên bản DB2 Express Tôi đang sử dụng để phát triển :-(

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