2009-06-28 58 views
29

Soy un novato en el desarrollo web relacionado con Java, y parece que no puedo obtener un programa simple con el funcionamiento de JDBC. Estoy usando Oracle 10g XE comercial y el Eclipse EE IDE. De los libros y páginas web que he revisado hasta ahora, reduje el problema a una URL de base de datos escrita incorrectamente o un archivo JAR faltante. Estoy consiguiendo el error siguiente:Formato de cadena URL para conectarse a la base de datos Oracle con JDBC

java.sql.SQLException: No suitable driver found for jdbc:oracle://127.0.0.1:8080

con el código siguiente:

import java.sql.*; 

public class DatabaseTestOne { 
    public static void main(String[] args) { 
     String url = "jdbc:oracle://127.0.0.1:8080"; 
     String username = "HR"; 
     String password = "samplepass"; 

     String sql = "SELECT EMPLOYEE_ID FROM EMPLOYEES WHERE LAST_NAME='King'"; 
     Connection connection; 
     try { 
      connection = DriverManager.getConnection(url, username, password); 
      Statement statement = connection.createStatement(); 
      System.out.println(statement.execute(sql)); 
      connection.close(); 
     } catch (SQLException e) { 
      System.err.println(e); 
     } 
    } 
} 

¿Cuál es el formato adecuado para una dirección URL base de datos, de todos modos? Se mencionan mucho, pero no he podido encontrar una descripción.

EDITAR (la resolución):

Sobre la base de la respuesta de duffymo, tengo ojdbc14.jar de Oracle's download site y lo dejó caer en referenciados Bibliotecas del proyecto Eclipse. Luego cambié el inicio del código a

... 
// jdbc:oracle:thin:@<hostname>:<port>:<sid> 
String url = "jdbc:oracle:thin:@GalacticAC:1521:xe"; 
... 

y funcionó.

Respuesta

29

Mire here.

Tu URL es bastante incorrecta. Debería tener este aspecto:

url="jdbc:oracle:thin:@localhost:1521:orcl" 

Tampoco registra una clase de controlador. Desea descargar el controlador JAR delgado, colocarlo en su CLASSPATH y hacer que su código se vea más como this.

ACTUALIZACIÓN: El "14" en "ojdbc14.jar" significa JDK 1.4. Debe coincidir con la versión de su controlador con el JDK que está ejecutando. Estoy apostando que significa JDK 5 o 6.

+0

Sólo quería actualizar la documentación que parece haberse movido aquí: http://docs.oracle.com/cd/E11882_01/appdev.112/e13995/oracle/jdbc/OracleDriver.html El enlace provisto en la respuesta más votado ahora redirige a una página 404. – drosenblatt

+3

Las cadenas de conexión que utilizan SID se están volviendo anticuadas. El uso de nombres de servicios le da al DBA mucha más flexibilidad (por ejemplo, servicios múltiples alojados en una instancia de base de datos (consolidación) o el uso de instancias múltiples para un servicio (RAC)). Ver la respuesta @Pops. –

+0

Al ver que la pregunta tiene casi cinco años, diría que no es una sorpresa. – duffymo

0
DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver());   
connection = DriverManager.getConnection("jdbc:oracle:thin:@machinename:portnum:schemaname","userid","password"); 
34

Hay dos formas de configurar esto. Si usted tiene un SID, utilice este formato (mayores):

jdbc:oracle:thin:@[HOST][:PORT]:SID 

Si usted tiene un nombre de servicio de Oracle, utilice este formato (más reciente):

jdbc:oracle:thin:@//[HOST][:PORT]/SERVICE 

Fuente: this OraFAQ page

El call to getConnection() is correct.

Además, como dijo duffymo, asegúrese de que el código de controlador real esté presente incluyendo ojdbc6.jar en el classpath, donde el número corresponde a la versión de Java que está utilizando.

+2

¡Recomiendo usar el nuevo formato! El formato anterior se conecta a una instancia de base de datos específica y a una instancia de base de datos específica solamente. Si elige crear un clúster de base de datos más adelante, es decir, para la escalabilidad, no podrá conectarse a ningún otro nodo sin introducir otra cadena de conexión. Los servicios brindan flexibilidad, especialmente para los entornos de Oracle RAC. Tiempo de inactividad planificado, conexiones coordinadas y análisis de rendimiento basado en el servicio, todo esto viene con el uso de '/ SERVICE' y no': SID'. La base de datos crea un servicio igual al nombre de la base de datos por defecto en la instalación. – gvenzl

11

El formato correcto para url puede ser uno de los siguientes formatos:

jdbc:oracle:thin:@<hostName>:<portNumber>:<sid>; (if you have sid) 
jdbc:oracle:thin:@//<hostName>:<portNumber>/serviceName; (if you have oracle service name) 

y no poner ningún espacio allí. Intente utilizar 1521 como número de puerto. sid (nombre de la base de datos) debe ser el mismo que está en las variables de entorno (si está usando Windows).

3

si está utilizando Oracle 10g expree Edición a continuación: 1.
para su uso en clase de carga DriverManager.registerDriver (new oracle.jdbc.OracleDriver()); 2. para la conexión con el uso de bases de datos Connection conn = DriverManager.getConnection("jdbc:oracle:thin:username/[email protected]:1521:xe");

Cuestiones relacionadas