Как подключить JDBC к TNS oracle
Я могу подключиться из plsql к базе данных с помощью TNS file
Теперь я хочу подключиться к базе данных с моей Java с помощью JDBC.
что я пробовал:
Я ищу 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
что я делаю не так?
Как подключить JDBC к базе данных с помощью TNS-файла?
3 ответов
вы должны установить свойство с именем oracle.net.tns_admin чтобы указать на расположение папки, содержащей ваш . Затем вы указываете запись из этого файла после @ войдите в свой 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) {}
    }
  }
}
Пример записи из :
my_net_service_name= 
 (DESCRIPTION= 
   (ADDRESS=(some address here))
   (CONNECT_DATA= 
     (SID=some_SID_name)))
здесь my_net_service_name строка - это то, что вы должны subsitite для ENTRY_FROM_TNSNAMES из моей Java образец.
вместо жесткого кода путь к 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.Джар