12

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

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

私が試したこと:

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

"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 をデータベースに接続するにはどうすればよいですか?

4

3 に答える 3

19

oracle.net.tns_adminファイルを含むフォルダーの場所を指すようにという名前のプロパティを設定する必要がありtnsnames.oraます。@次に、DB URL にサインインした後、そのファイルからエントリを指定します。以下の例を確認してください。詳細については、データ ソースと 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=
 (説明=
   (ADDRESS=(ここに住所))
   (CONNECT_DATA=
     (SID=some_SID_name))))

stringは、私のJavaの例からmy_net_service_name代入する必要があるものです。ENTRY_FROM_TNSNAMES

于 2013-10-23T09:05:43.577 に答える
5

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);
}
于 2015-02-18T19:54:33.360 に答える
4

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

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 を用意してください

于 2014-08-27T17:18:07.420 に答える