Come colbind JDBC a Oracle oracle

Posso collegarmi da plsql al database usando il file tns

Ora voglio connettermi al database dal mio Java usando JDBC.

Quello che ho provato:

Cerco Google e scopro che devo usare questa connessione String:

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

Il mio nome computer è myPC

La porta che è scritta nel file tns è 5151

    Così ho provato questa connessione String

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

    ma ho ottenuto questa eccezione

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

    Che cosa sto facendo di sbagliato?

    Come connettere il mio JDBC al database usando il file tns?

    Devi impostare una proprietà denominata oracle.net.tns_admin in modo che punti al percorso della cartella contenente il tuo file tnsnames.ora . Quindi si specifica la voce da quel file dopo il segno @ nell’URL del DB. Controlla l’esempio qui sotto. Puoi trovare maggiori informazioni qui: Fonti di dati e URL – Documentazione 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) {} } } } 

    Esempio di voce dal file tnsnames.ora :

      my_net_service_name = 
      (DESCRIPTION = 
        (INDIRIZZO = (qualche indirizzo qui))
        (CONNECT_DATA = 
          (SID = some_SID_name))) 

    Dove my_net_service_name stringa è ciò che è necessario subititare per ENTRY_FROM_TNSNAMES dal mio esempio Java.

    Piuttosto che codificare il percorso verso tnsnames.ora, meglio trovarlo dall’ambiente:

     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); } 

    Prova quanto segue:

     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); 

    Assicurati di avere l’ultima versione di ojdbc.jar