① 求,KETTLE怎麼用OCI方式連接資料庫ORACLE
Java程序連接oracle資料庫時,用oci驅動要比用thin驅動性能好些。主要的區別是使用thin驅動時,不需要安裝oracle的客戶端,而使用oci時則要安裝oracle的客戶端。
從使用thin驅動切換到oci驅動在配置來說很簡單,只需把連接字元串java:oracle:thin:@hostip:1521:實例名換為java:oracle:oci@本地服務名即可。如:
從
jdbc:oracle:thin:@10.1.1.2:1521:shdb
改成:
jdbc:oracle:oci8:@shdb
但這里這台機器需安裝oracle資料庫的客戶端並配置本地服務名,同時還需指定NLS_LANG環境變數,NLS_LANG環境變數是用來控制客戶端在顯示oracle資料庫的數據時所用的字元集和本地化習慣。通常把NLS_LANG的字元集部分指定為資料庫所用的字元集,就不會存在java顯示的亂碼問題了。
對於oracle資料庫客戶端的安裝,有二種選擇,一是老實的用oracle資料庫的安裝光碟,安裝對應版本的oracle客戶端。二是下載oracle提取的即時客戶端,即時客戶端是不用安裝的,把下載包解壓即可。
要使java web正常的通過oci驅動訪問oracle,還需要客戶端正確的配置一下相關變數。主要如下:
對於windows系統並使用oracle客戶端時:
1、把%ORACLE_HOME%\lib加到PATH環境變數。
2、把%ORACLE_HOME%\jdbc\lib\classes12.jar加到CLASSPATH環境變數里,也可以把classes12.jar拷貝到tomcat的comman\lib目錄下。
對於windows系統並使用oracle的即時客戶端時(假定即時客戶端解壓在d盤):
1、把d:\instantclient_10_2加到PATH環境變數;
2、把d:\instantclient_10_2\classes12.jar加到CLASSPATH環境變數里,也可以把classes12.jar拷貝到tomcat的comman\lib目錄下。
對於linux系統並使用oracle客戶端時:
1、在使用tomcat的用戶主目錄下的.bash_profile文件中加入:
exprot ORACLE_HOME=/u01/app/oracle/proct/9.2.0.4
export LD_LIBRARY_PATH=$ORACLE_HOME/lib
2、把classes12.jar拷貝到tomcat的comman\lib目錄下。
對於linux系統並使用oracle即時客戶端時:
1、在使用tomcat的用戶主目錄下的.bash_profile文件中加入:
exprot ORACLE_HOME=/instantclient_10_2
export LD_LIBRARY_PATH=$ORACLE_HOME/lib
2、把instantclient_10_2目錄下的classes12.jar拷貝到tomcat的comman\lib目錄下。
如果一個tomcat下帶了幾個應用,且幾個應用都要連接oracle資料庫時,則要注意的是,不要在每個應用的WEB-INF/lib目錄下放入oracle的classes12.jar/zip文件。而應該把classes12.jar/zip文件放到tomcat的common/lib目錄下。否則會出來ojdbclib9/10庫重復載入的錯誤。
使用oracle即時客戶端時,本地服務名的建立可以在目錄instantclient_10_2下建立tnsnames.ora下添加連接串,如:
SHDB =(DESCRIPTION =(ADDRESS_LIST =(ADDRESS =
(PROTOCOL = TCP)(HOST = 10.1.1.236)(PORT = 1521)))
(CONNECT_DATA =(SERVICE_NAME = shdb)))
② oci驅動連接oracle資料庫
<%
Dim conn
set conn=server.createobject("adodb.connection")
conn.Open "Provider=OraOLEDB.Oracle.1;Persist Security Info=True;User ID=dbo;Password=moaadmin;Data Source=mtas"
Set rs=Server.CreateObject("ADODB.Recordset")
'sqltext="select * from web_admin"
'rs.open sqltext,conn
%>
我的是oracle 9i
我的連接是這樣寫的!
希望對你有所幫助!
③ ocilib連接資料庫怎麼聲明
1. ocilib的使用
利用ocilib操作oracle資料庫
1) 首先初始化
OCI_Initialize(err_handler, NULL, OCI_ENV_THREADED)
這里的第一個參數是異常錯誤處理函數。
2) 創建連接
定義OCI_Connection* m_pConntion並為m_pConntion賦值。
m_pConntion = OCI_ConnectionCreate(csServerDataBase, csServerUser, csServerPassWord, OCI_SESSION_DEFAULT)
這里的第一個參數是oracle資料庫ip,埠及名字組成的字元串,172.7.14.6:1521/ORCL。第二個參數是用戶名,第三個參數是密碼。
3) 由已得的oci_connection*創建OCI_Statement* m_stRow。
m_stRow = OCI_StatementCreate(m_pConntion)。之後的SQL語句均與這個oci_statement*有關。
4) 對於返回記錄集的SQL語句。
OCI_ExecuteStmt(m_stRow, csSQL)。
這里第一個參數就是OCI_Statement* 的對象,也就是之前有oci_connection*所創建的。第二個參數就是要執行的SQL語句。如果要獲取記錄集,首先要定義一個記錄集指針OCI_Resultset* rsRow,然後調用rsRow = OCI_GetResultset(m_stRow),這里的參數仍然是OCI_Statement* 基本上要執行SQL語句都會用到這個。然後可以調用OCI_FetchNext(rsRow)來獲取記錄集中下一個記錄,如果配合while循環就可以遍歷記錄集。對於回去每一條記錄的每個欄位,要使用OCI_Get***,這里的***就是數據類型,常用的由OCI_GetInt,OCI_GetString,GetLob,OCI_GetDate OCI_GetTimestamp等等。
5) 對於沒有記錄集的操作,比如insert,可以使用上面的方法。Ocilib還提供了一種方式:bind方式。
對於這種方式,SQL語句也有一些小的變化,這里存在了佔位的概念。比如這樣的一個SQL語句:sqlInsert.Format("Insert into TableName(DeviceIndex,DrivewayNumber,DirectName,PlateInfo,PlateType,AlarmPlace,AlarmTime ,AlarmAction,VehicleSpeed,VehicleType,VehicleLen,VehicleColor,PlateColor,AlarmAdd,PicNum,PicFullView)values(:DeviceIndex,:DrivewayNumber,:DirectName,:PlateInfo,:PlateType,:AlarmPlace,:AlarmTime,:AlarmAction,:VehicleSpeed,:VehicleType,:VehicleLen,:VehicleColor,:PlateColor,:AlarmAdd,:PicNum,:PicfullView)"
這里的:DeviceIndex等都是隨意起名字的,當然為了可讀性,可以與欄位起相同的名字,「:」一定要有的。
OCI_Prepare(m_stRow, sqlInsert.GetBuffer());這里的第一個參數仍然是oci_statement*。這句話也是必須的。之後就要將變數與欄位名綁定在一起,比如:OCI_BindString(m_stRow, ":DeviceIndex", struAlarmTable.csDeviceIndex.GetBuffer(), 0);第二個參數就是前面SQL語句中佔位變數的名字,第三個參數是要綁定到欄位的具體的變數。可以綁定的類型由很多的。在每個欄位都完成綁定後調用OCI_Execute(m_stRow),然後再調用OCI_Commit(m_pConntion),這樣就完成了插入語句。當然這僅僅是插入一條數據,如果要進行批量綁定並插入,這里不做說明。
6) 退出時要記得釋放資源
OCI_StatementFree(m_stRow)
OCI_ConnectionFree(m_pConntion);
④ java的oci方式連接資料庫的問題
OCI 只是一種連接方式,既然你使用 Java 來做客戶端程序,為什麼要使用 Native 方式的驅動?
你應該使用 java:oracle:thin:@ 的 thin 協議來連接資料庫。
OCI 本身是為 C++, VB 這樣的程序准備的。Java 版本的程序建議使用 thin 協議的驅動。
Java 驅動有4種類型,type 1 - type 4,現在已經基本上普及了type 4驅動,幾乎所有的廠商都提供 type 4驅動,它是說伺服器端和驅動程序之間是廠商內部網路通信格式,驅動程序和 java 程序之間是純 java。而依賴廠商的 DLL 的驅動就是 type 2,它是要求在當前 path 變數路徑或 java.library.path 參數的路徑上能找到 oracle 驅動程序的 DLL。所以如果你堅持使用 oci 驅動,你需要把 oracle 的 BIN 目錄 (可能還有其它目錄,反正有Oracle 的 DLL 的目錄你都得確認一下)添加到 PATH 變數中。
而且要記得,type 2 驅動跟版本之間的依賴關系比較大,可能它要求特定版本的 DLL,而 type 2 則不同,它本身不依賴 dll,驅動與伺服器之間本來就是純 java 版的,它本身代替了DLL 的功能,所以版本依賴關系小。
你的 -Djava.library.path 的路徑是真實存在的 oracle 客戶端目錄么?裡面說的那個 dll 能找到么?你的程序中 println(System.getProperty("java.library.path")) 得到的結果是什麼?
⑤ 有人用過oracle的oci么
oracle調用介面(oracle Call Interface簡稱oci)提供了一組可對oracle資料庫進行存取的介面子常式(函數),通過在第三代程序設計語言(如c語言)中進行調用可達到存取oracle資料庫的目的。
在普通的情況下,用戶可以通過sql和PL/sql來訪問資料庫中的數據。oracle資料庫除了提供sql和PL/sql來訪問資料庫外,還提供了一個第三代程序設計語言的介面,用戶可以通過C、cobol、fortran等第三代語言來編程訪問資料庫。oci就是為了實現高級語言訪問資料庫而提供的介面。oci允許開發者在程序里使用sql和PL/sql來訪問資料庫。開發者可以使用第三代語言來編寫程序,而使用oci來訪問資料庫。
oci是由一組應用程序開發介面(api)組成的,ORACLE提供api的方式是提供一組庫。這組庫包含一系列的函數調用。這組函數包含了連接資料庫、調用SQL和事務控制等。在安裝dbms server或者客戶端的時候,就安裝了OCI。
OCI開發方法實際上是將結構化查詢語言(SQL)和第三代程序設計語言相結合的一種方法。對資料庫的訪問是通過調用OCI庫函數實現的,若將C語言作為宿主語言,那麼ORACLE資料庫調用其實就是C程序中的函數調用,一個含OCI調用的C程序其實就是用C語言編寫的應用程序。這樣的程序既具有SQL語言非過程性的優點又具有C語言過程性的優點,同時還可具有SQL語言的擴展,PL/SQL語言過程性和結構性的優點,因此使得開發出的應用程序具有高度靈活。
⑥ 如何在c語言中編程訪問資料庫
第一種,資料庫廠商提供的C變種,比如oracle的proc-c,簡單點說,就是在C嵌入sql代碼來實現資料庫的訪問。
第二種,資料庫廠商提供的api,比如oracle的OCI。
⑦ oci 連接 oracle
ORACLE調用介面(Oracle Call Interface簡稱OCI)提供了一組可對ORACLE資料庫進行存取的介面子常式(函數),通過在第三代程序設計語言(如C語言)中進行調用可達到存取ORACLE資料庫的目的。
在普通的情況下,用戶可以通過SQL和PL/SQL來訪問資料庫中的數據。ORACLE資料庫除了提供SQL和PL/SQL來訪問資料庫外,還提供了一個第三代程序設計語言的介面,用戶可以通過C、COBOL、FORTRAN等第三代語言來編程訪問資料庫。OCI就是為了實現高級語言訪問資料庫而提供的介面。OCI允許開發者在程序里使用SQL和PL/SQL來訪問資料庫。開發者可以使用第三代語言來編寫程序,而使用OCI來訪問資料庫。
⑧ 我有個c程序,通過OCI訪問資料庫,但是報錯了
無法解析指定的連接標識符
連接字元串有錯誤,你發上來大家看一下。