3

現在、現在のコンピューターのデータベースに接続しようとしています。

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

public class Main {
    public static void main(String[] argv) throws Exception {

        Connection connection = null;
        try {
            // Load the JDBC driver
            String driverName = "oracle.jdbc.driver.OracleDriver";
            Class.forName(driverName);

            // Create a connection to the database
            String serverName = "localhost";
            String portNumber = "1521";
            String sid = "xe";
            String url = "jdbc:oracle:thin:@" + serverName + ":" + portNumber + ":" + sid;
            String username = "scott";
            String password = "tiger";
            connection = DriverManager.getConnection(url, username, password);
            System.out.println("Success");
        } catch (ClassNotFoundException e) {
            System.out.println("Class Not Found Error");
        } 
    }
}

このエラーが繰り返し発生し、理由がわかりません...

Exception in thread "main" java.sql.SQLException: Listener refused the connection with the following error:
ORA-12505, TNS:listener does not currently know of SID given in connect descriptor
The Connection descriptor used by the client was:
localhost:1521:xe

at oracle.jdbc.driver.SQLStateMapping.newSQLException(SQLStateMapping.java:70)
at oracle.jdbc.driver.DatabaseError.newSQLException(DatabaseError.java:110)
at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:171)
at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:496)
at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:411)
at oracle.jdbc.driver.PhysicalConnection.<init>(PhysicalConnection.java:490)
at oracle.jdbc.driver.T4CConnection.<init>(T4CConnection.java:202)
at oracle.jdbc.driver.T4CDriverExtension.getConnection(T4CDriverExtension.java:33)
at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:465)
at java.sql.DriverManager.getConnection(Unknown Source)
at java.sql.DriverManager.getConnection(Unknown Source)
at Main.main(Main.java:21)

私のサーバー内で、コマンド(sysとしてログオン)SQL> select instance from v$thread; を使用しました。(返ってきます) インスタンス -> xe

何が間違っている可能性がありますか?

ありがとう!

PS localhost の代わりに 127.0.0.1 も試しました

4

5 に答える 5

4

文字列の代わりに url = "jdbc:oracle:thin:@" + serverName + ":" + portNumber + ":" + sid;

これを使って:

文字列 url = "jdbc:oracle:thin:@" + serverName + ":" + portNumber + "/" + sid;

于 2014-06-05T19:40:23.303 に答える
4

ディレクトリの下の listener.ora ファイル<ORACLE_HOME>\admin\NETWORKに次の値があるかどうかを確認します。

XE =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = XE)
    )
  )
于 2011-07-24T08:26:35.113 に答える
2

インストール中に設定したデータベース名に xe を置き換えてください。確実に成功します。

データベース名を忘れた場合は、oracle ディレクトリのファイル tnsnames.ora から取得できます。

于 2013-08-26T12:35:14.857 に答える
0

TNS リスナーが開始されたと推測しますが、リスナーよりも先にデータベース インスタンスが開始されました。

データベース インスタンスが起動すると、それ自体が TNS リスナーに登録されます。ただし、登録するリスナーがない場合、これを行うことはできません。リスナーは起動時に、認識しているインスタンスが起動したかどうかを確認しません。

デモンストレーションを提供できます。Windows 7 で Oracle 11g XE Beta を使用しています。最初は、OracleServiceXE サービスは実行されていますが、OracleXETNSListener サービスは実行されていません。

データベース接続コードを実行したところ、次のエラーが発生しました。

スレッド「メイン」の例外 java.sql.SQLRecoverableException: IO エラー: ネットワーク アダプタは接続を確立できませんでした

ORA-12505 エラーが発生した場合は、明らかに TNS リスナーが実行されています。

次に、TNS リスナーを開始し、データベース接続コードを再実行しました。今回は次の出力が得られました: (クラスの名前を変更し、その中のユーザー名とパスワードを変更しましたが、それ以外は、その中のコードは同じです):

C:\Users\Luke\stuff>java DbConnTest
スレッド「メイン」の例外 java.sql.SQLException: リスナーが次のエラーで接続を拒否しました:
ORA-12505、TNS: リスナーは現在、接続記述子で指定されたSIDを認識していません
[スタックトレースを切り取った]

(このエラーはあなたのものと同じではありません:The Connection descriptor used by the client was:セクションを取得できませんでした。理由は 100% わかりません。)

上記の場合、解決策は SQL*Plus に接続してSYS実行することALTER SYSTEM REGISTERです。これにより、インスタンスがリスナーに登録されます。

C:\Users\Luke\stuff>sqlplus / as sysdba

SQL*Plus: 2011 年 7 月 24 日 11:13:57 のリリース 11.2.0.2.0 ベータ版

Copyright (c) 1982, 2010, オラクル. 全著作権所有。


に接続されています:
Oracle Database 11g Express Edition リリース 11.2.0.2.0 - ベータ版

SQL> システム レジスタを変更します。

システムが変更されました。

SQL>終了
Oracle Database 11g Express Edition リリース 11.2.0.2.0 - ベータからの切断

これを行った後、データベースに接続できました:

C:\Users\Luke\stuff>java DbConnTest
成功
于 2011-07-24T10:42:59.603 に答える