2009-06-28 5 views
29

Sono un principiante dello sviluppo Web relativo a Java e non riesco a ottenere un semplice programma con JDBC funzionante. Sto usando Oracle 10g XE standard e l'IDE EE di Eclipse. Dai libri e dalle pagine Web che ho controllato fino ad ora, ho ridotto il problema a un URL del database scritto in modo errato o a un file JAR mancante. Sto ottenendo il seguente errore:Formato stringa URL per la connessione al database Oracle con JDBC

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

con il seguente codice:

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

Qual è il formato corretto per un URL del database, in ogni modo? Sono menzionati molto ma non sono stato in grado di trovare una descrizione.

EDIT (la risoluzione):

in base alla risposta del duffymo, ho ottenuto ojdbc14.jar da Oracle's download site e lo lasciò cadere nel fatto riferimento alla Biblioteche del progetto Eclipse. Poi ho cambiato l'inizio del codice in

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

e ha funzionato.

risposta

29

Look here.

L'URL non è corretto. Dovrebbe apparire come segue:

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

Non si registra nemmeno una classe di conducente. Si desidera scaricare il driver JAR thin, inserirlo nel CLASSPATH e rendere il proprio codice simile a this.

AGGIORNAMENTO: Il "14" in "ojdbc14.jar" sta per JDK 1.4. Dovresti abbinare la tua versione del driver con il JDK che stai utilizzando. Sto scommettendo che significa JDK 5 o 6.

+0

Volevo solo per aggiornare la documentazione che sembra essersi spostato qui: http://docs.oracle.com/cd/E11882_01/appdev.112/e13995/oracle/jdbc/OracleDriver.html Il link fornito nella risposta più votata ora reindirizza a una pagina 404. – drosenblatt

+3

Le stringhe di connessione che utilizzano i SID stanno diventando piuttosto obsolete. L'utilizzo dei nomi di servizio conferisce al DBA molta più flessibilità (ad esempio, più servizi ospitati su un'istanza di database (consolidamento) o l'utilizzo di più istanze per un servizio (RAC)). Vedi la risposta @Pops. –

+0

Visto che la domanda ha quasi cinque anni, direi che non è una sorpresa. – duffymo

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

Ci sono due modi per configurarlo. Se si dispone di un SID, utilizzare questo formato (più vecchio):

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

Se si dispone di un nome del servizio Oracle, utilizzare questo formato (più recente):

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

Fonte: this OraFAQ page

Il call to getConnection() is correct.

Inoltre, come ha detto duffymo, assicurarsi che il codice del driver sia presente includendo ojdbc6.jar nel classpath, dove il numero corrisponde alla versione di Java che si sta utilizzando.

+2

Consiglio vivamente di utilizzare il nuovo formato! Il vecchio formato si connette a un'istanza di database specifica e solo a un'istanza di database specifica. Se in seguito si è scelto di creare un cluster di database, ad esempio per la scalabilità, non sarà possibile connettersi a nessun altro nodo senza introdurre un'altra stringa di connessione. I servizi offrono flessibilità, specialmente per gli ambienti Oracle RAC. Tempo di inattività pianificato, connessioni coordinate e analisi delle prestazioni basate sui servizi, tutto questo viene fornito con l'uso di '/ SERVICE' e non': SID'. Il database crea un servizio uguale al nome del database per impostazione predefinita all'installazione. – gvenzl

11

Il formato corretto per URL può essere uno dei seguenti formati:

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

e non mettere qualsiasi spazio lì. Prova a usare 1521 come numero di porta. sid (nome del database) deve essere uguale a quello presente nelle variabili di ambiente (se si utilizza Windows).

3

se si utilizza Oracle 10g expree Edition poi:
1. per l'uso della classe di carico DriverManager.registerDriver (new oracle.jdbc.OracleDriver()); 2. per la connessione al database di uso Connection conn = DriverManager.getConnection("jdbc:oracle:thin:username/[email protected]:1521:xe");