J'utilise la base de données Oracle. J'ai écrit un petit programme de connexion JDBC en Java, mais je suis confronté à un problème avec l'auditeur.
import Java.sql.Connection;
import Java.sql.DriverManager;
import Java.sql.PreparedStatement;
import Java.sql.ResultSet;
import Java.sql.SQLException;
public class JdbcConnection {
public static void main(String[] args) throws SQLException,ClassNotFoundException {
String url = "jdbc:Oracle:thin:@localhost:1521:orcl";
String user = "system";
String password = "password";
Connection connection = null;
Class.forName("Oracle.jdbc.driver.OracleDriver");
connection = DriverManager.getConnection(url, user, password);
if(connection!=null){
System.out.println("Success in connnection");
} else {
System.out.println("failure in connection ");
}
}
}
Je reçois l'exception suivante:
C:\Users\Administrator\Desktop>Java JdbcConnection
Exception in thread "main" Java.sql.SQLException: Listener refused the connectio
n with the following error:
ORA-12505, TNS:listener does not currently know of SID given in connect descriptor
The Connection descriptor used by the client was:
localhost:1521:orcl
at Oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.Java
:112)
at Oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.Java
:261)
at Oracle.jdbc.driver.T4CConnection.logon(T4CConnection.Java:387)
at Oracle.jdbc.driver.PhysicalConnection.<init>(PhysicalConnection.Java:
441)
at Oracle.jdbc.driver.T4CConnection.<init>(T4CConnection.Java:165)
at Oracle.jdbc.driver.T4CDriverExtension.getConnection(T4CDriverExtensio
n.Java:35)
at Oracle.jdbc.driver.OracleDriver.connect(OracleDriver.Java:801)
at Java.sql.DriverManager.getConnection(Unknown Source)
at Java.sql.DriverManager.getConnection(Unknown Source)
at JdbcConnection.main(JdbcConnection.Java:18)
Ceci est la sortie de lsnrctl status
LSNRCTL for 64-bit Windows: Version 12.1.0.1.0 - Production on 16-JUN-2015 13:43
:41
Copyright (c) 1991, 2013, Oracle. All rights reserved.
Welcome to LSNRCTL, type "help" for information.
LSNRCTL> status
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1521)))
STATUS of the LISTENER
------------------------
Alias LISTENER
Version TNSLSNR for 64-bit Windows: Version 12.1.0.1.0 - Produ
ction
Start Date 16-JUN-2015 12:02:52
Uptime 0 days 1 hr. 40 min. 52 sec
Trace Level off
Security ON: Local OS Authentication
SNMP OFF
Listener Parameter File C:\app\orauser\product\12.1.0\dbhome_1\network\admin\l
istener.ora
Listener Log File C:\app\orauser\diag\tnslsnr\hydwemvm\listener\alert\lo
g.xml
Listening Endpoints Summary...
(DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(PIPENAME=\\.\pipe\EXTPROC1521ipc)))
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(Host=hydwemvm)(PORT=1521)))
Services Summary...
Service "CLRExtProc" has 1 instance(s).
Instance "CLRExtProc", status UNKNOWN, has 1 handler(s) for this service...
The command completed successfully
Si vous connaissez votre SID de base de données Oracle, utilisez
jdbc:Oracle:thin:@localhost:1521:orcl
sinon utilisez ci-dessous si vous avez le nom du service
jdbc:Oracle:thin:@localhost:1521/orcl
Assurez-vous également que le nom du service avec le nom ORCL
devrait être opérationnel. Si cela ne fonctionne toujours pas, vous devez redémarrer votre ordinateur et réessayer ci-dessus.
Tu ne travailles toujours pas? Ensuite, essayez de suivre:
Connectez-vous avec SYSTEM
utilisateur et enregistrezLOCAL_LISTENER
en exécutant en dessous de SQL.
alter system set local_listener = '(ADDRESS=(PROTOCOL=TCP)(Host=localhost)(PORT=1521))' scope = both;
alter system register;
Comment vérifier le SID Oracle et le nom du service:
SELECT sys_context('USERENV', 'SID') FROM DUAL; -- It will return your Oracle database SID
SELECT sys_context('USERENV', 'SERVICE_NAME') FROM DUAL; -- It will return your Oracle database service name
Pouvez-vous utiliser l'URL ci-dessous?
Notez la différence, il s’agit d’utiliser le SERVICENAME au lieu d’un SID.
jdbc:Oracle:thin:@localhost:1521/orclservice
Si vous voulez connaître le SID par défaut de votre base de données, utilisez cette requête dans sqlplus:
SELECT sys_context('USERENV', 'SID') FROM DUAL;
Utilisez cette valeur dans l'URL JDBC au lieu de "orcl".