2011-01-28 12 views
183

kullanarak Oracle bağlanmak için:Java JDBC - Böyle isim, liman ve Oracle SID kullanarak bir gelişme veritabanına bağlanırken edildi (JPA üzerinden) JDBC kullandığı bir Java uygulaması var Servis Adı yerine SID

JDBC: oracle: ince: @ oracle.hostserver1.mydomain.ca: 1521: XYZ

XYZ Oracle SID idi. Şimdi bir SID kullanmayan farklı bir Oracle veritabanına bağlanmam gerekiyor, ancak bunun yerine bir Oracle "Servis Adı" kullanıyor.

Bu çalıştı ama çalışmıyor:

jdbc: oracle: İnce: @ oracle.hostserver2.mydomain.ca: 1522: ABCD

ABCD diğerinin Hizmet Adı olduğu veri tabanı.

Neyi yanlış yapıyorum?

cevap

324

http://download.oracle.com/docs/cd/B28359_01/java.111/b31224/urls.htm#BEIDHCBA

bir link olduğunu (// dikkat edin): Bu alt tarafındaki yorum aslında doğrudur başına

İnce stil Servis Adı Sözdizimi

İnce stil servis adları yalnızca JDBC Thin sürücüsü tarafından desteklenir. sözdizimi:

@ // host_name: baglanti_noktasi_numarasi/Örneğin Hizmet_adı

:

JDBC: oracle: İnce: Scott/kaplan @ // myhost: 1521/myservicename

Bu yüzden denemek:

jdbc: oracle: ince: @ // oracle.hostserver2.mydomain.ca:1522/ABCD

Ayrıca Robert Greathouse en Yanıt başına, ayrıca aşağıda JDBC URL'ye TNS adını belirtebilirsiniz:

jdbc:oracle:thin:@(DESCRIPTION =(ADDRESS_LIST =(ADDRESS =(PROTOCOL=TCP)(HOST=blah.example.com)(PORT=1521)))(CONNECT_DATA=(SID=BLAHSID)(GLOBAL_NAME=BLAHSID.WORLD)(SERVER=DEDICATED))) 
+6

+1. – DwB

+6

+1 kılavuzuna başvurmak için –

+7

+1, gelecekten geliyorum ve çözümünüz bana bir saat daha başım ağrıyor –

11

bu deneyin: jdbc:oracle:thin:@oracle.hostserver2.mydomain.ca:1522/ABCD

Edit: jdbc:oracle:thin:@//oracle.hostserver2.mydomain.ca:1522/ABCD

İşte

yararlı bir maddeye

+2

Bu benim için çalışmadı, 'jdbc: oracle: thin: @ // oracle.hostserver2.mydomain.ca: 1522/ABCD' kullanmak zorunda kaldı. Referans bağlantısı için – WynandB

20

Ayrıca aşağıda JDBC URL'ye TNS adını belirtebilirsiniz

jdbc:oracle:thin:@(DESCRIPTION =(ADDRESS_LIST =(ADDRESS =(PROTOCOL=TCP)(HOST=blah.example.com)(PORT=1521)))(CONNECT_DATA=(SID=BLAHSID)(GLOBAL_NAME=BLAHSID.WORLD)(SERVER=DEDICATED))) 
+0

Bu benim için iyi çalıştı. – EzAnalyst

+0

Bu sorunun tam cevabının çok önemli bir parçası. Teşekkürler! –

74

Bu işi yapmanın iki kolay yolu var. Başka herhangi bir Oracle'a özgü bağlantı özelliği sağlamanız gerekmiyorsa, Bert F tarafından gönderilen çözüm sorunsuz çalışır. Bunun için biçimi şöyledir:

jdbc:oracle:thin:@//HOSTNAME:PORT/SERVICENAME 

Ancak, diğer Oracle özgü bağlantı özelliklerini tedarik o zaman uzun TNSNAMES stili kullanmak gerekecektir gerekiyorsa.Son zamanlarda Oracle'ın paylaşılan bağlantılarını (sunucunun kendi bağlantı havuzunu yaptığı yerde) etkinleştirmek için bunu yapmak zorundaydım. TNS biçimi şöyledir: Eğer Oracle TNSNAMES dosya biçimi aşina iseniz

jdbc:oracle:thin:@(description=(address=(host=HOSTNAME)(protocol=tcp)(port=PORT))(connect_data=(service_name=SERVICENAME)(server=SHARED))) 

, o zaman bu sizin için tanıdık gelecektir. Değilse, sadece detaylar için Google.

+0

Çok teşekkürler! Bu çok yararlı oldu :) – Ethereal

+1

TNS biçimi varyasyon hakkında bilmiyordum, teşekkürler –

+0

Sevgili Jim, nasıl bu "oracle.jdbc.ReadTimeout = 30000" gibi jdbc bağlantı parametrelerini ekleyebilirim? –

5

Bu tartışma, günlerce uğraştığım sorunu çözmeme yardımcı oldu. 18 Mayıs 11'de saat 15: 17'de Jim Tough tarafından cevaplanana kadar internete baktım. Bu cevapla bağlanabildim. Şimdi geri vermek ve tam bir örnekle başkalarına yardım etmek istiyorum. Buraya:

import java.sql.*; 

public class MyDBConnect { 

    public static void main(String[] args) throws SQLException { 

     try { 
      String dbURL = "jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=whatEverYourHostNameIs)(PORT=1521)))(CONNECT_DATA=(SERVICE_NAME=yourServiceName)))"; 
      String strUserID = "yourUserId"; 
      String strPassword = "yourPassword"; 
      Connection myConnection=DriverManager.getConnection(dbURL,strUserID,strPassword); 

      Statement sqlStatement = myConnection.createStatement(); 
      String readRecordSQL = "select * from sa_work_order where WORK_ORDER_NO = '1503090' "; 
      ResultSet myResultSet = sqlStatement.executeQuery(readRecordSQL); 
      while (myResultSet.next()) { 
       System.out.println("Record values: " + myResultSet.getString("WORK_ORDER_NO")); 
      } 
      myResultSet.close(); 
      myConnection.close(); 

     } catch (Exception e) { 
      System.out.println(e); 
     }  
    } 
} 
1

Eğer SID olmadan kahini bağlamak için tutulma kullandığınız durumda. Seçmek için iki sürücü vardır, Oracle zayıf sürücü ve diğer bir sürücüdür. Diğer sürücüleri seçin ve veritabanı sütununa servis adını girin. Artık SID olmadan servis adını kullanarak doğrudan bağlanabilirsiniz.

+0

Daha da önemlisi, bu, Thin Driver'ın aksine bağlantı URL'sini tam olarak belirtmenize olanak tanır. Komik olan şu ki, çalışmak için ince sürücü URL'sini kullanmak zorunda kalıyorsunuz (sadece JDBC ince sürücü tarafından desteklenen ince stil servis isimleri). Burada yayınlanan örnekler bol. –

İlgili konular