Question

J'ai une application Java qui utilise JDBC (via JPA) qui a été connecter à une base de développement en utilisant le nom d'hôte, le port et Oracle SID, comme ceci:

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

XYZ a été le SID Oracle. Maintenant, je dois vous connecter à une autre base de données Oracle qui n'utilise pas un SID, mais utilise un Oracle « Nom du service » à la place.

J'ai essayé, mais il ne fonctionne pas:

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

ABCD est le nom de service de l'autre base de données.

Qu'est-ce que je fais mal?

Était-ce utile?

La solution

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

Service de style Thin Nom Syntaxe

Les noms de services de style mince sont pris en charge que par le pilote Thin JDBC. La syntaxe est:

@ // nom_hôte: numéro_port / nom_service

Par exemple:

jdbc: oracle: thin: scott / tigre @ // myhost: 1521 / myservicename

Je voudrais essayer:

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

En outre, par la réponse de Robert Greathouse, vous pouvez également spécifier le nom de TNS dans l'URL JDBC comme ci-dessous:

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

Autres conseils

Donc, il y a deux façons simples de faire ce travail. La solution affichée par Bert F fonctionne très bien si vous n'avez pas besoin de fournir d'autres propriétés de connexion spéciales spécifiques à Oracle. Le format de c'est:

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

Toutefois, si vous devez fournir d'autres propriétés de connexion spécifiques à Oracle, vous devez utiliser le style long TNSNAMES. Je devais le faire récemment pour permettre des connexions partagées Oracle (où le serveur fait sa propre mise en commun de connexion). Le format TNS est:

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

Si vous êtes familier avec le format de fichier Oracle TNSNAMES, cela devrait vous être familier. Sinon, il suffit de Google pour les détails.

Vous pouvez également spécifier le nom TNS dans l'URL JDBC comme ci-dessous

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

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

Edit: par commentaire ci-dessous c'est correct actualy: jdbc:oracle:thin:@//oracle.hostserver2.mydomain.ca:1522/ABCD (notez le //)

Voici un lien à un article utile

Cette discussion m'a aidé à résoudre le problème que je luttais avec des jours. Je regardais autour de tous sur Internet jusqu'à ce que je le répondu par Jim dur le 18 mai '11 à 15h17. Avec cette réponse, j'ai pu se connecter. Maintenant, je veux donner en retour et aider les autres avec un exemple complet. Ici 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);
        }       
    }
}

Si vous utilisez Eclipse pour Oracle connecter sans SID. Il y a deux pilotes pour sélectionner à savoir, le pilote mince Oracle et d'autres est un autre pilote. Sélectionnez d'autres pilotes et entrez le nom du service dans la colonne de base de données. Maintenant, vous pouvez vous connecter directement en utilisant le nom de service sans SID.

Lors de l'utilisation dag au lieu de thin, la syntaxe ci-dessous indiquant le nom du service a fonctionné pour moi. Les solutions de jdbc:thin ci-dessus ne fonctionne pas.

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

Cela devrait travailler: jdbc:oracle:thin//hostname:Port/ServiceName=SERVICE_NAME

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top