国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Java > 正文

Java開發(fā)Oracle數(shù)據(jù)庫連接JDBC Thin Driver 的三種方法

2019-11-26 14:47:20
字體:
供稿:網(wǎng)友

Oracle的jdbc驅(qū)動(dòng)三種主要分類:

1、JDBC OCI: oci是oracle call interface的縮寫,此驅(qū)動(dòng)類似于傳統(tǒng)的ODBC 驅(qū)動(dòng)。因?yàn)樗枰狾racle Call Interface and Net8,所以它需要在運(yùn)行使用此驅(qū)動(dòng)的JAVA程序的機(jī)器上安裝客戶端軟件,其實(shí)主要是用到orcale客戶端里以dll方式提供的oci和服務(wù)器配置。

2、JDBC Thin: thin是for thin client的意思,這種驅(qū)動(dòng)一般用在運(yùn)行在WEB瀏覽器中的JAVA程序。它不是通過OCI or Net8,而是通過Java sockets進(jìn)行通信,是純java實(shí)現(xiàn)的驅(qū)動(dòng),因此不需要在使用JDBC Thin的客戶端機(jī)器上安裝orcale客戶端軟件,所以有很好的移植性,通常用在web開發(fā)中。

3、JDBC KPRB: 這種驅(qū)動(dòng)由直接存儲(chǔ)在數(shù)據(jù)庫中的JAVA程序使用,如Java Stored Procedures 、triggers、Database JSP's。因?yàn)槭窃诜?wù)器內(nèi)部使用,他使用默認(rèn)或當(dāng)前的會(huì)話連接來訪數(shù)據(jù)庫,不需要用戶名密碼等,也不需要數(shù)據(jù)庫url。

一.JDBC 連接Oracle 說明

JDBC 的應(yīng)用連接Oracle 遇到問題,錯(cuò)誤如下:

ORA-12505,TNS:listener does not currently know of SID given in connect descriptor TheConnection descriptor used by the client was。

我在DB 層面配置了靜態(tài)注冊(cè),并且GLOBAL_DBNAME和SID_NAME 不一樣,以往的配置都是一樣的,所以沒有發(fā)現(xiàn)這個(gè)問題。

 (SID_DESC =  (GLOBAL_DBNAME = dave)   (ORACLE_HOME =D:/app/Administrator/product/11.2.0/dbhome_1)  (SID_NAME = NEWCCS) )

Oracle Listener 動(dòng)態(tài)注冊(cè) 與 靜態(tài)注冊(cè)

//www.survivalescaperooms.com/article/75885.htm

在網(wǎng)上google 了一下,發(fā)現(xiàn)JDBC Thin Driver 的formats 有三種格式:

格式一:  Oracle JDBC Thin using a ServiceName: 

jdbc:oracle:thin:@//<host>:<port>/<service_name>
Example: jdbc:oracle:thin:@//192.168.2.1:1521/XE

注意這里的格式,@后面有//, 這是與使用SID的主要區(qū)別。

這種格式是Oracle 推薦的格式,因?yàn)閷?duì)于集群來說,每個(gè)節(jié)點(diǎn)的SID 是不一樣的,但是SERVICE_NAME 確可以包含所有節(jié)點(diǎn)。

格式二: Oracle JDBC Thin using an SID: 

jdbc:oracle:thin:@<host>:<port>:<SID>
Example: jdbc:oracle:thin:192.168.2.1:1521:X01A

Note: Support for SID is being phased out. Oracle recommends that users switch over to usingservice names.

格式三:Oracle JDBC Thin using a TNSName: 

jdbc:oracle:thin:@<TNSName>
Example: jdbc:oracle:thin:@GL

Note:
Support for TNSNames was added in the driver release 10.2.0.1

二.測試

2.1 準(zhǔn)備工作:

Oracle 是11gR2

Listener.oraSID_LIST_LISTENER = (SID_LIST = (SID_DESC =  (GLOBAL_DBNAME = dave)   (ORACLE_HOME =D:/app/Administrator/product/11.2.0/dbhome_1)  (SID_NAME = NEWCCS) ) )Tnsnames.oraDVD = (DESCRIPTION = (ADDRESS_LIST =  (ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521)) ) (CONNECT_DATA =  (SERVICE_NAME = dave) ) )

 2.2 測試1,使用SID:newccs

.imporjava.sql.*  .publiclasjdb  StrindbUr"jdbc:oracle:thin:@...::newccs"  StrintheUse"dave"  StrintheP"dave"  Connectionull  Statemenconn  ResultSernull  publijdbc(  tr  Class.forName("oracle.jdbc.driver.OracleDriver").newInstance()  DriverManager.getConnection(dbUrltheUserthePw)  conc.createStatement()  catc(Exceptioe  e.printStackTrace()  publibooleaexecuteUpdate(Strinsql  tr  conn.executeUpdate(sql)  returtrue  catc(SQLExceptioe  e.printStackTrace()  returfalse  publiResultSeexecuteQuery(Strinsql  rnull  tr  rconn.executeQuery(sql)  catc(SQLExceptioe  e.printStackTrace()  returrs  publivoiclose(  tr  conn.close()  c.close()  catc(Exceptioe  e.printStackTrace()  publistativoimain(String[args  ResultSers  jdbconnejdbc()  rconn.executeQuery("selecfrodavwherrownum<")  tr  whil(rs.next()  System.out.println(rs.getString("username")+"--"+rs.getString("user_id"))  catc(Exceptioe  e.printStackTrace()  .  .---輸出正常  .MGMT_VIEW--  .ANQING--  .DVD--  .SYSMAN-- 

2.3 使用 service_name:dave

將2.2 節(jié)的dbUrl 改成如下:

String dbUrl = "jdbc:oracle:thin:@//127.0.0.1:1521/dave";

輸出結(jié)果:

MGMT_VIEW--97
 
ANQING--94
 
DVD--93
 
SYSMAN--95

如果在11g里遇到如下錯(cuò)誤: 

測試運(yùn)行Java 類,報(bào)錯(cuò):

java.sql.SQLException: The Network Adapter could not establish the connection

可以嘗試更換對(duì)應(yīng)的 jdbc connection driver,官網(wǎng)的說明如下:

JDBC Thin Driver 11g Causes"Java.Sql.Sqlexception: Io Exception: The Network Adapter Could NotEstablish The Connection" While Connecting to Oracle Database 11g [ID947653.1]

Change the JDBC connection driver class inyour application server from:

oracle.jdbc.driver.OracleDriver
to
oracle.jdbc.OracleDriver

2.4 使用TNS name: dvd

String dbUrl = "jdbc:oracle:thin:@dvd";

報(bào)錯(cuò)如下:

java.sql.SQLException: Unknown host specified

該問題是因?yàn)镴VM 沒有oracle.net.tns_admin的system property。

解決方法有2種:

方法一:在啟動(dòng)VM 時(shí)添加如下參數(shù): 

-Doracle.net.tns_admin=D:/app/Administrator/product/11.2.0/dbhome_1/NETWORK/ADMIN

方法二:在java 代碼里添加:

System.setProperty("oracle.net.tns_admin","D://app//Administrator//product//11.2.0//dbhome_1//NETWORK//ADMIN");

添加之后,就可以正常在JDBC中使用tnsnama了。

.imporjava.sql. .publiclasjdStrindbUr"jdbc:oracle:thin:@dvd .StrindbUr"jdbc:oracle:thin:@//...:/dave .StrindbUr"jdbc:oracle:thin:@...::newccsStrintheUse"daveStrintheP"daveConnectionulStatemenconResultSernulpublijdbc t System.setProperty("oracle.net.tns_admin","D://app//Administrator//product//..//dbhome_//NETWORK//ADMIN" Class.forName("oracle.jdbc.driver.OracleDriver").newInstance( ./Class.forName("oracle.jdbc.OracleDriver").newInstance( DriverManager.getConnection(dbUrltheUserthePw conc.createStatement( catc(Exceptio e.printStackTrace(publibooleaexecuteUpdate(Strinsq t conn.executeUpdate(sql returtru catc(SQLExceptio e.printStackTrace( returfalspubliResultSeexecuteQuery(Strinsq rnul t rconn.executeQuery(sql catc(SQLExceptio e.printStackTrace( returrpublivoiclose t conn.close( c.close( catc(Exceptio e.printStackTrace(publistativoimain(String[arg ResultSer jdbconnejdbc( rconn.executeQuery("selecfrodavwherrownum<" t whil(rs.next(System.out.println(rs.getString("username")+"--"+rs.getString("user_id") catc(Exceptio e.printStackTrace(

 下面給大家分享一段代碼關(guān)于Java中通過jdbc(thin方式)連接Oracle數(shù)據(jù)庫

package com.jdbc.OracleTest; import java.sql.DriverManager; import java.sql.Connection; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; public class OracleJdbcConnectionTest { /** * by jarin 年月日 * @param args */ public static void main(String[] args) { try { //第一步要Jar包:在oracle安裝的目錄下,盤符:/oracle/ora/jdbc/lib/ojdbc.jar //加載驅(qū)動(dòng) Class.forName("oracle.jdbc.driver.OracleDriver"); //連接字符串(協(xié)議名:jdbc,子協(xié)議名: oracle:thin 子名稱:@localhost::oracleDB) String url ="jdbc:oracle:thin:@localhost::ora"; try {  //建立連接  Connection conn = DriverManager.getConnection(url,"scott","");  //創(chuàng)建Statement或者是PreparedStatement語句  Statement st = conn.createStatement();  String sqlStr= "select ename from emp";  //執(zhí)行查詢  ResultSet rs = st.executeQuery(sqlStr);  //遍歷結(jié)果  while (rs.next()) {  System.out.println(rs.getString());  } } catch (SQLException e) {  e.printStackTrace(); } } catch (ClassNotFoundException e) { e.printStackTrace(); } } }
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 内丘县| 瑞丽市| 南昌市| 肇东市| 宁乡县| 通山县| 阳东县| 南丹县| 沂水县| 商丘市| 田东县| 牟定县| 襄城县| 嘉峪关市| 若尔盖县| 辽阳市| 郴州市| 五原县| 蕲春县| 沙坪坝区| 山东| 汽车| 鲁山县| 剑川县| 平舆县| 青州市| 云梦县| 高邮市| 密云县| 万源市| 廉江市| 余江县| 文安县| 革吉县| 梅河口市| 平顶山市| 蓬莱市| 郯城县| 庄河市| 塘沽区| 高陵县|