2009-06-28 12 views
29

Je suis novice en matière de développement Web lié à Java, et je n'arrive pas à obtenir un programme simple fonctionnant avec JDBC. J'utilise Oracle 10g XE standard et l'IDE Eclipse EE. À partir des livres et des pages Web que j'ai consultés jusqu'à présent, j'ai réduit le problème à une URL de base de données mal écrite ou à un fichier JAR manquant. Je reçois l'erreur suivante:Format de chaîne d'URL pour la connexion à la base de données Oracle avec JDBC

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

avec le code suivant:

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

Quel est le format approprié pour une URL de base de données, de toute façon? Ils sont souvent mentionnés mais je n'ai pas été capable de trouver une description.

EDIT (la résolution):

Sur la base de la réponse de duffymo, je me suis ojdbc14.jar de Oracle's download site et a chuté dans les bibliothèques Référencés du projet Eclipse. Puis j'ai changé le début du code à

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

et cela a fonctionné.

Répondre

29

Regardez here.

Votre URL est tout à fait incorrecte. Cela devrait ressembler à ceci:

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

Vous n'enregistrez pas non plus de classe de pilotes. Vous voulez télécharger le JAR du pilote léger, le mettre dans votre CLASSPATH, et faire ressembler votre code à this. MISE À JOUR: Le "14" de "ojdbc14.jar" signifie JDK 1.4. Vous devriez faire correspondre votre version de pilote avec le JDK que vous utilisez. Je parie que cela signifie 5 ou JDK 6.

+0

Je voulais juste mettre à jour que la documentation semble avoir déplacé ici: http://docs.oracle.com/cd/E11882_01/appdev.112/e13995/oracle/jdbc/OracleDriver.html Le lien fourni dans la réponse la mieux votée redirige désormais vers une page 404. – drosenblatt

+3

Les chaînes de connexion utilisant les identificateurs SID deviennent relativement démodées. L'utilisation de noms de service donne beaucoup plus de souplesse à l'administrateur de base de données (par exemple, plusieurs services hébergés sur une instance de base de données (consolidation) ou plusieurs instances pour un service (RAC)). Voir @Pops réponse. –

+0

Voyant que la question a presque cinq ans, je dirais que ce n'est pas une surprise. – duffymo

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

Il y a deux façons de configurer ceci. Si vous avez un SID, utilisez ce (plus) Format:

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

Si vous avez un nom de service Oracle, utilisez ce format (plus récent):

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

Source: this OraFAQ page

Le call to getConnection() is correct. De même, comme l'a dit duffymo, assurez-vous que le code du pilote actuel est présent en incluant ojdbc6.jar dans le chemin de classe, où le numéro correspond à la version de Java que vous utilisez.

+2

Je recommande fortement d'utiliser le nouveau format! L'ancien format se connecte à une instance de base de données spécifique et à une instance de base de données spécifique uniquement. Si vous choisissez de créer ultérieurement un cluster de base de données, c'est-à-dire pour des raisons d'évolutivité, vous ne pourrez pas vous connecter à un autre nœud sans introduire une autre chaîne de connexion. Les services offrent de la flexibilité, en particulier pour les environnements Oracle RAC. Temps d'arrêt planifié, connexions coordonnées et analyse de performance basée sur le service, tout cela est fait avec '/ SERVICE' et non': SID'. La base de données crée un service égal au nom de la base de données par défaut lors de l'installation. – gvenzl

11

Le format correct pour l'URL peut être l'un des formats suivants:

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

Et ne mettez pas là un espace. Essayez d'utiliser 1521 comme numéro de port. sid (nom de la base de données) doit être identique à celui qui se trouve dans les variables d'environnement (si vous utilisez Windows).

3

si vous utilisez Oracle 10g expree Édition puis:
1. pour la classe de chargement DriverManager.registerDriver (new oracle.jdbc.OracleDriver()); 2. pour la connexion à la base de données utilisation Connection conn = DriverManager.getConnection("jdbc:oracle:thin:username/[email protected]:1521:xe");