web-dev-qa-db-ja.com

JDBCをtnsoracleに接続する方法

Tnsファイルを使用してplsqlからデータベースに接続できます

ここで、JDBCを使用してJavaからデータベースに接続します。

私が試したこと:

グーグルを検索すると、この接続文字列を使用する必要があることがわかりました。

"jdbc:Oracle:thin:@//Host:port))/tnsfile)";

私のコンピューター名はmyPC

Tnsfileに書き込まれるポートは5151

だから私はこの接続文字列を試しました

"jdbc:Oracle:thin:@//myPC:5151))/tnsfile"

しかし、私はこの例外を得ました

Java.sql.SQLRecoverableException: IO ERROR: SO Exception was generated

私は何が間違っているのですか?

Tnsファイルを使用してJDBCをデータベースに接続するにはどうすればよいですか?

8
Marco Dinatsoli

Oracle.net.tns_adminファイルを含むフォルダーの場所を指すように、tnsnames.oraという名前のプロパティを設定する必要があります。次に、DBURLの@サインの後に、そのファイルのエントリを指定します。以下の例を確認してください。詳細については、次を参照してください。 データソースとURL-Oracleドキュメント

import Java.sql.*;

public class Main {
  public static void main(String[] args) throws Exception {
    System.setProperty("Oracle.net.tns_admin", "C:/app/product/11.2.0/client_1/NETWORK/ADMIN");
    String dbURL = "jdbc:Oracle:thin:@ENTRY_FROM_TNSNAMES";

    Class.forName ("Oracle.jdbc.OracleDriver");

    Connection conn = null;
    Statement stmt = null;

    try {
      conn = DriverManager.getConnection(dbURL, "your_user_name", "your_password");

      System.out.println("Connection established");

      stmt = conn.createStatement();

      ResultSet rs = stmt.executeQuery("SELECT dummy FROM dual");

      if (rs.next()) {
        System.out.println(rs.getString(1));
      }
    } catch (Exception e) {
      e.printStackTrace();
    }
    finally {
      if (stmt != null) try { stmt.close(); } catch (Exception e) {}
      if (conn != null) try { conn.close(); } catch (Exception e) {}
    }
  }
}

tnsnames.oraファイルからのエントリ例:

my_net_service_name = 
(DESCRIPTION = 
(ADDRESS =(ここにいくつかのアドレス))
(CONNECT_DATA = 
(SID = some_SID_name)))

ここで、my_net_service_name文字列は、私のJavaの例からENTRY_FROM_TNSNAMESを置き換える必要があるものです。

17

Tnsnames.oraへのパスをハードコーディングするのではなく、環境から見つける方がよいでしょう。

public static void setTnsAdmin() {
    String tnsAdmin = System.getenv("TNS_ADMIN");
    if (tnsAdmin == null) {
        String oracleHome = System.getenv("Oracle_HOME");
        if (oracleHome == null) {
            return; //failed to find any useful env variables
        }
        tnsAdmin = oracleHome + File.separatorChar + "network" + File.separatorChar + "admin";
    }
    System.setProperty("Oracle.net.tns_admin", tnsAdmin);
}
5
Greg Chabala

次のことを試してください。

System.setProperty("Oracle.net.tns_admin", PATH_TO_TNSNAMES.ORA);
Class.forName ("Oracle.jdbc.OracleDriver");
dbUrl = "jdbc:Oracle:thin:@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(Host="+IPHOST+")(PORT="+PORT+"))(CONNECT_DATA=(SERVER = DEDICATED)(SERVICE_NAME="+DBNAME+")))"

conn = DriverManager.getConnection(dbUrl, USERNAME, PASSWORD);

必ず最新バージョンのojdbc.jarを使用してください

3
user2213042