簡體   English   中英

如何將JDBC連接到tns oracle

[英]How to connect JDBC to tns oracle

我可以使用tns文件從plsql連接到數據庫

現在我想使用JDBC從我的Java連接到數據庫。

我嘗試了什么:

我搜索谷歌,我發現我必須使用此連接字符串:

"jdbc:oracle:thin:@//host:port))/tnsfile)";

我的電腦名是myPC

在tnsfile中寫入的端口是5151

所以我嘗試了這個連接String

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

但我得到了這個例外

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

我究竟做錯了什么?

如何使用tns文件將我的JDBC連接到數據庫?

您必須將名為oracle.net.tns_admin的屬性設置為指向包含tnsnames.ora文件的文件夾的位置。 然后在數據庫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= 
 (DESCRIPTION= 
   (ADDRESS=(some address here))
   (CONNECT_DATA= 
     (SID=some_SID_name)))

其中my_net_service_name字符串是我必須從我的Java示例中為ENTRY_FROM_TNSNAMES my_net_service_name字符串。

而不是硬編碼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);
}

請嘗試以下方法:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM