2012-04-13 147 views
0

所以我用JDBC和mySQL連接到一個java應用程序中的測試mySQL數據庫,一切正常。生產最終將在Oracle數據庫上進行。看來我可以更改驅動程序和連接來完成這項工作。Oracle與JDBC的連接

我得到了這一點:/usr/local/oracle/product/10.1.0/client_1/bin/sqlplus -S用戶/密碼@服務@ something.sql

所以我假定這是怎麼回事在本地訪問。我也獲得了主持人。所以我想連接的URL會轉換爲以下內容,我能夠做到這一點:

String url = "jdbc:oracle:thin:user/[email protected]//host/SERVICE"

Connection c = DriverManager.getConnection(url);

,但這似乎並不奏效。我對@ something.sql部分感到困惑。我如何將其包含在我的連接網址中?在我當前的連接URL「jdbc:oracle:thin:user/password @ // host/SERVICE」中是否還有任何明顯的錯誤?

+1

退房這個職位 - http://stackoverflow.com/questions/4832056/java-jdbc-how-to-connect-to-oracle-using-service-name-instead-of-sid – mazaneicha 2012-04-13 16:42:38

+0

我使用jdbc:oracle:thin:@host:1521:SERVICE語法,並提供用戶名和密碼分開。謝謝。 – 2012-04-13 19:09:00

回答

1

首先,sqlplus是一個來自Oracle的命令行工具,他們給了你一個例子,其中的值應該被替換爲他們的例子。

如果你有一個名爲「ababa」的用戶有一個密碼「芝麻」。假設該服務是服務器「瓶子」上的「精靈」。如果從命令行運行的SQL是「SELECT * FROM wishes LIMIT 3」,它位於名爲「/tmp/wishes.sql」的文件中。

在命令行中,人們可以鍵入以下內容:

/usr/local/oracle/product/10.1.0/client_1/bin/sqlplus -S ababa/[email protected] @/tmp/wishes.sql 

從Java,一會叫:

Connection conn = DriverManager.getConnection("jdbc:oracle:thin://bottle/genie", 
               "ababa", 
               "sesame"); 
0

我通常不直接在我的代碼中直接使用連接字符串,但看起來大部分是正確的。真正的問題是Oracle不是標準的,這就是爲什麼你在那裏擁有愚蠢的@標誌。

你也可能發現你的一些SQL也無法工作。那是因爲Oracle有一些怪癖。在將其投入生產之前,您應該先對照Oracle數據庫測試您的代碼。

+2

沒有像「標準」JDBC URL那樣的東西。它**是**供應商特定的(根據定義)。順便說一句:MySQL比Oracle有更多的怪癖(允許存儲2月31日只是其中之一) – 2012-04-13 16:51:42

+0

哦,我確實在生產之前測試它。在代碼中直接使用連接字符串的替代方法是什麼? – 2012-04-13 19:08:42

+0

彈出JDBC的東西。 Apache dbUtils。還有其他幾個可以爲你抽象出JDBC的混亂的東西。 – 2012-04-17 16:49:31