Domanda

Ho un'applicazione Java che utilizza JDBC (via APP) che è stato connesso a un database di sviluppo utilizzando il nome host, la porta e Oracle SID, in questo modo:

jdbc: oracle: thin: @ oracle.hostserver1.mydomain.ca: 1521: XYZ

XYZ era il SID Oracle. Ora ho bisogno di connettersi a un database Oracle diverso che non utilizza un SID, ma utilizza un Oracle "Service Name", invece.

ho provato questo, ma non funziona:

jdbc: oracle: thin: @ oracle.hostserver2.mydomain.ca: 1522: ABCD

ABCD è il nome del servizio degli altri database.

Che cosa sto facendo di sbagliato?

È stato utile?

Soluzione

http://download.oracle. com / docs / cd / B28359_01 / java.111 / b31224 / URLs.htm # BEIDHCBA

stile sottile Servizio Nome Sintassi

nomi di servizi in stile sottile sono supportati solo dal driver JDBC sottile. La sintassi è:

@ // nome_host: numero_porta / service_name

Ad esempio:

jdbc: oracle: thin: Scott / Tiger @ // myhost: 1521 / myservicename

Quindi vorrei provare:

jdbc: oracle: thin: @ // oracle.hostserver2.mydomain.ca:1522/ABCD

Inoltre, per la risposta di Robert Greathouse, è anche possibile specificare il nome TNS nel JDBC URL, di seguito:

jdbc:oracle:thin:@(DESCRIPTION =(ADDRESS_LIST =(ADDRESS =(PROTOCOL=TCP)(HOST=blah.example.com)(PORT=1521)))(CONNECT_DATA=(SID=BLAHSID)(GLOBAL_NAME=BLAHSID.WORLD)(SERVER=DEDICATED)))

Altri suggerimenti

Quindi ci sono due semplici modi per fare questo lavoro. La soluzione pubblicato da Bert F funziona bene se non è necessario per la fornitura di qualsiasi altro particolari proprietà di connessione Oracle-specifica. Il formato per che è:

jdbc:oracle:thin:@//HOSTNAME:PORT/SERVICENAME

Tuttavia, se è necessario fornire altre proprietà di connessione Oracle-specifici allora avete bisogno di utilizzare il lungo stile TNSNAMES. Ho dovuto fare questo di recente per consentire Oracle connessioni condivise (dove il server fa il proprio pool di connessioni). Il formato TNS è:

jdbc:oracle:thin:@(description=(address=(host=HOSTNAME)(protocol=tcp)(port=PORT))(connect_data=(service_name=SERVICENAME)(server=SHARED)))

Se si ha familiarità con il formato di file di Oracle TNSNAMES, allora questo dovrebbe essere familiare a voi. Se poi non solo Google per i dettagli.

È possibile anche specificare il nome TNS nel JDBC URL, di seguito

jdbc:oracle:thin:@(DESCRIPTION =(ADDRESS_LIST =(ADDRESS =(PROTOCOL=TCP)(HOST=blah.example.com)(PORT=1521)))(CONNECT_DATA=(SID=BLAHSID)(GLOBAL_NAME=BLAHSID.WORLD)(SERVER=DEDICATED)))

Prova questo: jdbc:oracle:thin:@oracle.hostserver2.mydomain.ca:1522/ABCD

Modifica: per questo commento qui sotto è actualy corretto: jdbc:oracle:thin:@//oracle.hostserver2.mydomain.ca:1522/ABCD (si noti la //)

Ecco un link ad un utile articolo

Questa discussione mi ha aiutato a risolvere il problema ho faticato con per giorni. Mi guardai intorno tutto l'Internet fino a quando ho trovato la risposta da Jim Duro il 18 maggio '11 a 15:17. Con questa risposta sono stato in grado di connettersi. Ora voglio dare indietro e aiutare gli altri con un esempio completo. Qui va:

import java.sql.*; 

public class MyDBConnect {

    public static void main(String[] args) throws SQLException {

        try { 
            String dbURL = "jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=whatEverYourHostNameIs)(PORT=1521)))(CONNECT_DATA=(SERVICE_NAME=yourServiceName)))";
            String strUserID = "yourUserId";
            String strPassword = "yourPassword";
            Connection myConnection=DriverManager.getConnection(dbURL,strUserID,strPassword);

            Statement sqlStatement = myConnection.createStatement();
            String readRecordSQL = "select * from sa_work_order where WORK_ORDER_NO = '1503090' ";  
            ResultSet myResultSet = sqlStatement.executeQuery(readRecordSQL);
            while (myResultSet.next()) {
                System.out.println("Record values: " + myResultSet.getString("WORK_ORDER_NO"));
            }
            myResultSet.close();
            myConnection.close();

        } catch (Exception e) {
            System.out.println(e);
        }       
    }
}

Nel caso in cui si utilizza Eclipse a Oracle Connetti senza SID. Ci sono due driver per selezionare vale a dire, il driver sottile Oracle e altro è altro driver. Selezionare altri driver e immettere il nome del servizio nella colonna di database. Ora è possibile connettersi direttamente utilizzando il nome del servizio, senza SID.

Quando si utilizza dag invece di thin, la sintassi di seguito che punta al nome del servizio ha funzionato per me. Le soluzioni jdbc:thin di cui sopra non ha funzionato.

jdbc:dag:oracle://HOSTNAME:1521;ServiceName=SERVICE_NAME

This should be working: jdbc:oracle:thin//hostname:Port/ServiceName=SERVICE_NAME

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top