Có một vài điều có thể gây ra vấn đề này, nhưng trước khi bạn bắt đầu với JDBC, bạn cần chắc chắn rằng bạn có thể kết nối với cơ sở dữ liệu bằng SQL * Plus. Nếu bạn không quen thuộc với SQL * Plus, thì đây là công cụ dòng lệnh để kết nối với cơ sở dữ liệu Oracle đã là một phần tiêu chuẩn của Oracle trong một thời gian dài và nó được bao gồm trong Oracle XE.
Khi kết nối với cơ sở dữ liệu Oracle bằng JDBC, bạn không kết nối trực tiếp với cơ sở dữ liệu. Thay vào đó, bạn kết nối với trình nghe TNS, sau đó kết nối bạn với cơ sở dữ liệu. Lỗi ORA-12505
có nghĩa là người nghe đã khởi động và bạn có thể kết nối với nó, nhưng nó không thể kết nối bạn với cơ sở dữ liệu vì không biết rằng cơ sở dữ liệu đó đã hoạt động. Có hai lý do cho việc này:
- cơ sở dữ liệu chưa được khởi động,
- cơ sở dữ liệu chưa được đăng ký với người nghe, ví dụ vì cơ sở dữ liệu đã được khởi động trước người nghe. (Khi cơ sở dữ liệu khởi động, nó sẽ tự đăng ký với người nghe nếu nó đang chạy. Nếu người nghe không chạy, cơ sở dữ liệu sẽ không tự đăng ký và nếu người nghe khởi động, nó sẽ không tìm kiếm cơ sở dữ liệu có thể đăng ký với nó.)
ORA-12505 có nghĩa là người nghe biết về cơ sở dữ liệu đó, nhưng người nghe chưa nhận được thông báo từ cơ sở dữ liệu rằng cơ sở dữ liệu đã hoạt động. (Nếu bạn đang cố kết nối với cơ sở dữ liệu sai, sử dụng SID sai, bạn sẽ gặp lỗi ORA-12154 "TNS: không thể giải quyết định danh kết nối được chỉ định".)
Những dịch vụ nào của Oracle đang chạy trong phần đính vào Dịch vụ? (Mở phần này từ Bảng điều khiển> Công cụ quản trị> Dịch vụ hoặc chỉ Bắt đầu> Chạy>services.msc
.) Bạn cần các dịch vụ OracleServiceXE và OracleXETNSListener để chạy.
Nếu cả hai dịch vụ đều được khởi động, bạn có thể kết nối với cơ sở dữ liệu trong SQL * Plus bằng cách sử dụng bất kỳ thao tác nào sau đây tại dấu nhắc lệnh không? (Tôi cho rằng bạn đang chạy những thứ này trên máy bạn đã cài đặt Oracle XE.)
hệ thống sqlplus / mật khẩu hệ thống @XE
hệ thống sqlplus /mật khẩu hệ thống
sqlplus / như sysdba
(Thay thế system-password
bằng mật khẩu bạn đã đặt cho người dùng SYS và HỆ THỐNG trong quá trình cài đặt Oracle XE.)
Đầu tiên trong ba kết nối này thông qua trình nghe TNS, nhưng hai thứ hai kết nối trực tiếp với cơ sở dữ liệu mà không thông qua trình nghe và chỉ hoạt động nếu bạn ở trên cùng một máy với cơ sở dữ liệu. Nếu cái đầu tiên thất bại nhưng hai cái kia thành công, thì các kết nối JDBC cũng sẽ thất bại. Nếu vậy, hãy kết nối với cơ sở dữ liệu bằng cách sử dụng một trong hai cái kia và chạyALTER SYSTEM REGISTER
. Sau đó thoát khỏi SQL * Plus và thử lại mẫu đầu tiên.
Nếu cái thứ ba không thành công nhưng cái thứ hai hoạt động, hãy thêm tài khoản người dùng của bạn vào nhóm ora_dba. Thực hiện việc này trong Bảng điều khiển> Quản lý máy tính> Người dùng và nhóm cục bộ.
Khi bạn có thể nhận được kết nối của biểu mẫu
hệ thống sqlplus / mật khẩu hệ thống @XE
để hoạt động, bạn phải có khả năng kết nối với Oracle XE thông qua JDBC. (Ngẫu nhiên, bạn đã không cho chúng tôi xem mã JDBC mà bạn đang sử dụng để kết nối với cơ sở dữ liệu, nhưng tôi nghi ngờ rằng nó hoàn toàn có thể đúng; sẽ có nhiều lỗi khác nếu các phần của chuỗi kết nối bị sai.)