Oracle 12c connexion de base de données à l'aide de fines pilote jette IO erreur
Je suis JDBC Guide du Développeur et essayer de tester le JDBC mince pilote de connexion à l'aide d'un petit programme java.
import java.sql.*;
import oracle.jdbc.*;
import oracle.jdbc.pool.OracleDataSource;
class JDBCVersion
{
public static void main (String args[]) throws SQLException
{
OracleDataSource ods = new OracleDataSource();
ods.setURL("jdbc:oracle:thin:hr/hr@localhost:1522:orcl");
Connection conn = ods.getConnection();
//Create Oracle DatabaseMetaData object
DatabaseMetaData meta = conn.getMetaData();
//gets driver info:
System.out.println("JDBC driver version is " + meta.getDriverVersion());
}
} //<host>:<port>:<service>
J'ai tout essayé, <host>:<port>:<service>
combinaison, mais encore une java.sql.SQLRecoverableException: IO Error: The Network Adapter could not establish the connection
J'ai testé avec succès le BEC pilote à l'aide d'un autre programme inclus dans le tutoriel....mais ne peut pas trouver de travail. Mon application utilise le mince conducteur de se connecter à la base de données, donc mon niveau de frustration....l'escalade.
Toute aide est appréciée.
- Obtenez-vous la même exception, même lorsque vous fournissez le nom d'utilisateur et le mot de passe pour la connexion?
- Oui, même erreur. Est-il BESOIN du nom d'utilisateur et le mot de passe? J'ai lu à plusieurs contradictoires
- Pour réussir à se connecter ,oui. Après repenser, je suppose que l'exception serait une formulation différente. Avez-vous vérifié l'hôte, le port et la SID? Qui connecter URL êtes-vous à l'aide de BEC?
- Le BEC utilise un TNS, aucune autre information nécessaire. Je vais essayer de nouveau avec de l'onu/pw et d'en faire rapport.
- Avez-vous comparé l'hôte, le port et SID avec les valeurs de la TNS nom?
- J'ai: PDBORCL = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1522)) (CONNECT_DATA = (SERVEUR = DÉDIÉE) (SERVICE_NAME = pdborcl.global.ds.XXXXXXXXX.com)
- J'ai essayé d'utiliser le SERVICE_NAME au lieu de orcl). Pas de chance
Vous devez vous connecter pour publier un commentaire.
Peut-être à la suite des commentaires pourrait expliquer pourquoi vous avez besoin de la sevice nom au lieu de le SID dans l'URL.
la Oracle JDBC FAQ mentionner que
SIDs will be cease to be supported in one of the next few releases of the database
la Oracle JDBC devolopers guide mention
Always connect to a service. Never use instance_name or SID because these do not direct to known good instances and SID is deprecated
la Oracle de 2 jours + développeur Java tutoriel parler de la syntaxe
jdbc:oracle:driver_type:[username/password]@//host_name:port_number:SID
qui semble être un mélange de SID et de service nom de l'URL (en suivant les autres documents et votre travail exemple)en revanche la javadoc de OracleDriver ne citer que les SID syntaxe
la Oracle FAQ wiki mentionner à la fois la syntaxe
.
Je suis en mesure de se connecter à mon conteneur DB (contenant mes tables, des packages, etc.) en utilisant le nom d'utilisateur/mot de passe.
Retourne:
Ne pouvez toujours pas vous connecter au tutoriel "RH" APB qui vient avec l'oracle 12c installer et qui JDBC tutoriel utilise.
Edit:
Réussi à le faire fonctionner en utilisant les suivantes:
Ne comprends toujours pas pourquoi j'ai besoin de la totalité des nom au lieu du nom de l'instance.
Lors de la connexion à un APB, vous devez toujours utiliser l'APB, du nom du service dans la chaîne de connexion. Il ressemble à votre APB services "pdborcl.global.XXXXXXXX.com" c'est ce que vous devez utiliser pour vous connecter à l'APB directement.
Personnellement, je trouve plus facile à utiliser le long format de l'URL:
"jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=localhost)(PORT=1522))(CONNECT_DATA=(SERVICE_NAME=pdborcl.global.XXXXXXXX.com)))"
Il rend évident le fait que vous utilisez un nom de Service à la place d'un SID.
La beauté de la chose est que vous pouvez également tester facilement votre chaîne de connexion avec sqlplus:
sqlplus "hr/hr@(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=localhost)(PORT=1522))(CONNECT_DATA=(SERVICE_NAME=pdborcl.global.XXXXXXXX.com)))"
Si sqlplus fonctionne il n'y a pas de raison de l'JDBC Mince conducteur ne serait pas.
Enfin, vous pouvez également connecter la racine de la base de données à l'aide d'un privilège de l'utilisateur, puis exécuter la commande "ALTER SESSION SET CONTENEUR=apb" pour passer à l'APB. Si vous décidez de le faire vous devez modifier votre chaîne de connexion pour se connecter à la racine récipient premier. Il devrait avoir son propre nom de service.