如何将JDBC连接到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 =(这里有一些地址))
    (CONNECT_DATA = 
      (SID = some_SID_name))) 

其中my_net_service_name字符串是您必须从我的Java示例中为ENTRY_FROM_TNSNAMES包含的内容。

而不是硬编码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