❶ c#webservice介面開發調用Oracle資料庫為什麼會出現這種狀況
以下幾個步驟一一排除問題:
建立鏈雹伏本地webservice引用,用這個引用試試能不能連接上oracle。肆遲如果能說明不是iis部署的問題。棚攜
程序中添加oralce的引用,像using System.Data.SqlClient;或using System.Data.OracleClient;這樣的引用。排除資料庫引用的問題。
用本機的oracle連接oracle伺服器,看能不能連接上,如果能則排除連接問題。
❷ Oracle EBS 的介面方式是什麼樣的與 DBLINK 有什麼不同
1、標准介面表2、標准API前者例如AP的發票介面表,供應商、客戶介面表,具體實現方式是,將數據按照介面表規格准備到介面表中,然後運行標準的import程序將介面表數據導入到Oracle EBS中(即各介面表對應的正式table中)。
而例如銀行、分行、銀行帳戶相關API,一般通過客戶化程序,調用此類API實現將數據導入系統,此時一般也會新建一些客戶化staging table,先將外部數據准備到staging table後,再使用客戶化程序,調用API將資料導入Oracle EBS中。
通常,「Oracle EBS的介面方式」指的是數據進入Oracle EBS的方式,主要有兩類技術:
1、標准介面表
2、標准API
前者例如AP的發票介面表,供應商、客戶介面表,具體實現方式是,將數據按照介面表規格准備到介面表中,然後運行標準的import程序將介面表數據導入到Oracle EBS中(即各介面表對應的正式table中)。
而例如銀行、分行、銀行帳戶相關API,一般通過客戶化程序,調用此類API實現將數據導入系統,此時一般也會新建一些客戶化staging table,先將外部數據准備到staging table後,再使用客戶化程序,調用API將資料導入Oracle EBS中。
而DBLINK則是資料庫之間的資料交換方式,假如Oracle EBS的資料庫需要與其他資料庫(例如其他系統的資料庫)進行資料交互,那麼DBLINK是其中一個選項而已。
以上,兩者直接比較沒有太大意義,完全可能是應用於不同業務場景下的技術。
❸ 通過JDBC連接oracle資料庫的幾個技巧
java資料庫連接(jdbc)api是一系列能夠讓java編程人員訪問資料庫的介面,各個開發商的介面並不完全相同。以下是一些技巧,這些技巧能夠使我們更好地發揮系統的性能和實現更多的功能。1、在客戶端軟體開發中使用thin驅動程序
在開發java軟體方面,oracle的資料庫提供了四種類型的驅動程序,二種用於應用軟體、applets、servlets等客戶端軟體,另外二種用於資料庫中的java存儲過程等伺服器端軟體。在客戶機端軟體的開發中,我們可以選擇oci驅動程序或thin驅動程序。oci驅動程序利用java本地化介面(jni),通過oracle客戶端軟體與資料庫進行通訊。thin驅動程序是純java驅動程序,它直接與資料庫進行通訊。為了獲得最高的性能嫌塵,oracle建議在客戶端軟體的開發中使用oci驅動程序,這似乎是正確的。但我建議使用thin驅動程序,因為通過多次測試發現,在通常情況下,thin驅動程序的性能都超過了oci驅動程序。
2、關閉自動提交功能,提高系統性能
在第一次建立與資料庫的連接時,在預設情況下,連接是在自動提交模式下的。為了獲得更好的性能,可以通過調用帶布爾值false參數的connection類的setautocommit()方法關閉自動提交功能,如下所示:
conn.setautocommit(false);
值得注意的是,一旦關閉了自動提交功能,我們就需要通過調用connection類的commit()和rollback()方法來人工的方式對事務進行管理。
3、在動態sql或有時間限制的命令中使用statement對象
在執行sql命令時,我們有二種選舉明擇:可以使用preparedstatement對象,也可以使用statement對象。無論多少次地使用同一個sql命令,preparedstatement都只對它解析和編譯一次。當使用statement對象時,每次執行一個sql命令時,都會對它進行解析和芹答禪編譯。這可能會使你認為,使用preparedstatement對象比使用statement對象的速度更快。然而,我進行的測試表明,在客戶端軟體中,情況並非如此。因此,在有時間限制的sql操作中,除非成批地處理sql命令,我們應當考慮使用statement對象。
此外,使用statement對象也使得編寫動態sql命令更加簡單,因為我們可以將字元串連接在一起,建立一個有效的sql命令。因此,我認為,statement對象可以使動態sql命令的創建和執行變得更加簡單。
4、利用helper函數對動態sql命令進行格式化
在創建使用statement對象執行的動態sql命令時,我們需要處理一些格式化方面的問題。例如,如果我們想創建一個將名字o'reilly插入表中的sql命令,則必須使用二個相連的“''”號替換o'reilly中的“'”號。完成這些工作的最好的方法是創建一個完成替換操作的helper方法,然後在連接字元串心服用公式表達一個sql命令時,使用創建的helper方法。與此類似的是,我們可以讓helper方法接受一個date型的值,然後讓它輸出基於oracle的to_date()函數的字元串表達式。
5、利用preparedstatement對象提高資料庫的總體效率
在使用preparedstatement對象執行sql命令時,命令被資料庫進行解析和編譯,然後被放到命令緩沖區。然後,每當執行同一個preparedstatement對象時,它就會被再解析一次,但不會被再次編譯。在緩沖區中可以發現預編譯的命令,並且可以重新使用。在有大量用戶的企業級應用軟體中,經常會重復執行相同的sql命令,使用preparedstatement對象帶來的編譯次數的減少能夠提高資料庫的總體性能。如果不是在客戶端創建、預備、執行preparedstatement任務需要的時間長於statement任務,我會建議在除動態sql命令之外的所有情況下使用preparedstatement對象。
6、在成批處理重復的插入或更新操作中使用preparedstatement對象
如果成批地處理插入和更新操作,就能夠顯著地減少它們所需要的時間。oracle提供的statement和 callablestatement並不真正地支持批處理,只有preparedstatement對象才真正地支持批處理。我們可以使用addbatch()和executebatch()方法選擇標準的jdbc批處理,或者通過利用preparedstatement對象的setexecutebatch()方法和標準的executeupdate()方法選擇速度更快的oracle專有的方法。要使用oracle專有的批處理機制,可以以如下所示的方式調用setexecutebatch():
preparedstatement pstmt3d null;
try {
((oraclepreparedstatement)
pstmt).setexecutebatch(30);
...
pstmt.executeupdate();
}
調用setexecutebatch()時指定的值是一個上限,當達到該值時,就會自動地引發sql命令執行,標準的executeupdate()方法就會被作為批處理送到資料庫中。我們可以通過調用preparedstatement類的sendbatch()方法隨時傳輸批處理任務。
7、使用oracle locator方法插入、更新大對象(lob)
oracle的preparedstatement類不完全支持blob和clob等大對象的處理,尤其是thin驅動程序不支持利用preparedstatement對象的setobject()和setbinarystream()方法設置blob的值,也不支持利用setcharacterstream()方法設置clob的值。只有locator本身中的方法才能夠從資料庫中獲取lob類型的值。可以使用preparedstatement對象插入或更新lob,但需要使用locator才能獲取lob的值。由於存在這二個問題,因此,我建議使用locator的方法來插入、更新或獲取lob的值。
8、使用sql92語法調用存儲過程
在調用存儲過程時,我們可以使用sql92或oracle pl/sql,由於使用oracle pl/sql並沒有什麼實際的好處,而且會給以後維護你的應用程序的開發人員帶來麻煩,因此,我建議在調用存儲過程時使用sql92。
9、使用object sql將對象模式轉移到資料庫中
既然可以將oracle的資料庫作為一種面向對象的資料庫來使用,就可以考慮將應用程序中的面向對象模式轉到資料庫中。目前的方法是創建java bean作為偽裝的資料庫對象,將它們的屬性映射到關系表中,然後在這些bean中添加方法。盡管這樣作在java中沒有什麼問題,但由於操作都是在資料庫之外進行的,因此其他訪問資料庫的應用軟體無法利用對象模式。如果利用oracle的面向對象的技術,可以通過創建一個新的資料庫對象類型在資料庫中模仿其數據和操作,然後使用jpublisher等工具生成自己的java bean類。如果使用這種方式,不但java應用程序可以使用應用軟體的對象模式,其他需要共享你的應用中的數據和操作的應用軟體也可以使用應用軟體中的對象模式。
❹ 請教oracle oci 的 OCI
Oracle Call Interface (OCI):Oracle 調用介面 。
Oracle 調用介面 (OCI) 是最全面、性能最高、基於原生「C」語言的 Oracle 資料庫介面,它可以提供 Oracle 資料庫的全部功能。OCI 為構建各種語言專用介面(如 Oracle JDBC-OCI、ODP.Net、Oracle 預編譯器、蘆譽Oracle ODBC 和 Oracle C++ Call Interface (OCCI)驅動程序)提供了基礎。各種領先的開源介面(如 PHP OCI8 擴展、ruby-oci8、Perl DBD::oracle 和 Python cx_oracle)也都使用 OCI。作為對 Oracle 資料庫的原生介面,OCI 還對 Oracle 資料庫核心內部發出的查詢、語句和調用進行了增強。各種 Oracle 工具(如 SQL*Plus、Real Application Testing (RAT)、SQL*Loader 和 Data-Pump)也都是基於 OCI。此外敗嘩桐, Oracle In-Memory Database Cache(即 IMDB Cache,又稱為 TimesTen)也支持 OCI 和 Oracle Pro*C/C++ 預編譯器。Oracle Instant Client 為 ISV 和客戶提供了快速安裝和部署 Oracle 應用程序的能力。
OCI就是為了實現高級語言訪問資料庫而提供的介面。OCI允許開發者在程序里察坦使用SQL和PL/SQL來訪問資料庫。開發者可以使用第三代語言來編寫程序,而使用OCI來訪問資料庫。
❺ PB內置Oracle資料庫介面的使用方法[1]
PowerBuilder(PB)和Oracle分別是前端開發工具和RDBMS的主流產品 PB提供了兩種與Oracle連接的介面 PowerSoft內置的資料庫介面(Native Database Interface)和ODBC介面
PowerBuilder與Oracle的連接
假定已安裝Oracle客戶端應用程序 可用Sqlplus或Tnsping等是否能連接到Oracle資料庫 確定在SQL*NET配置文件中使用的資料庫別名(Database Alias 又稱伺服器名 Server Name) 如有疑問 可在Oracle客戶端程序目錄下tnsname ora文件中找到 另外保證搜索路徑已包括SQL*NET應用程序的安裝目錄(如C:ORAWIN BIN)
進入PB的Database Profiles畫筆 可看到所有已安裝的資料庫介面(PB 預設安裝的是Oracle 版的介面 如使用低版本的Oracle 需在安裝時指定) 選擇 O Oracle 點擊 New 按鈕 進入Database Profile Setup對話框 在 Connection 頁輸入下列信息 Profile Name:為該Database Profile起一個有意義的名稱 Server:@TNS:ServerName 其中ServerName為上述資料庫別名(伺服器名) 如@TNS:ORA ;注意 PB 則沒有前面那個@TNS:!!!
Login ID:Oracle資料庫中實際的用戶名 由於PB初次連接到數穗冊據庫時要自動建立五個系統表(PowerBuilder Catalog Table:PBCATTBL PBCATCOL PBCATEDT PBCATFMT PBCATVLD 存儲表的擴展屬性) 因此第一個連接到Oracle的用戶必須具有建表 給PUBLIC角色授權等許可權 例如可用SYSTEM用戶進行第一次連接 此後的連接對用握族滾戶則無特殊要求
Password:該用戶的口令
設置上述內容後 即可連上Oracle 為優化資料庫連接 還可設置下列選項
Prompt for Database Information:連接時是否提示用戶輸入用戶名和口令
Generate Trace:啟動DB跟蹤工具 跟蹤連接
Thread Safe:開發需要多線程環境支持的分布式應用時 選擇該項 預設為未選 適用於非分布應用
PBDBMS:與存儲過程調用方式有關的參數 Oracle為 或更高版本時 清除該選項 此時帶IN OUT參數的存儲過程可作為數據窗口數據源 版本以下 選擇該項 調用PBDBMS Put Line建立存儲過程的SQL語句 預設是選中
Commit on Disconnect:斷開連接時 指定提交或回退未提交的事務
Case Sensitive:連接的Oracle伺服器是否區分大小寫 注意該項選中時段余 所有主鍵 包含主鍵的表名 外鍵須全為大寫字元
PowerBuilder Catalog Tables Owner:指定擁有PB系統表的用戶 預設為 SYSTEM 如果要使用多種顯示格式或有效性規則 可以在不同的用戶下建立幾套系統表
Table Criteria:指定滿足哪些條件的表 視圖和同義詞可在 Select Tables 對話框中顯示出來 例如DEV用戶下銷售子系統的表都以SALE開頭 則可以用SALE% DEV TABLE VIEW 指定只顯示DEV用戶以SALE開頭的表和視圖
Asynchronous:選擇該項 可在一個復雜的SQL語句執行過程中 返回第一行結果前 切換到其他操作
Number of Seconds to Wait:若上一項選中 還可進一步通過該項指定檢索數據時 等待資料庫響應的時間
Retrieve Blocking Factor:決定數據窗口對象一次可從資料庫取出的記錄數
Number of SQL Staments Cached:PB可將數據窗口對象產生的SQL語句和嵌入式SQL語句保存在SQL語句緩沖區 該參數指定緩沖區為PB保留的SQL語句數目 該數值可由下式計算 SQLCache=伺服器OPEN CURSORS數 (保留的游標數) 本連接預期使用的最大游標數
Disable Bind:指定是否將輸入變數與SQL語句綁定 此參數影響PB為數據窗口對象生成INSERT語句的方式
Static Bind:數據窗口對象檢索數據前是否檢測SELECT語句的合法性
在Syntax頁 還可指定日期 時間的格式等 在Preview頁可查看Database Profile設置對應的PowerScript寫法
Oracle存儲過程的使用
歸納起來PB 中調用Oracle存儲過程有以下四種方法
方法一 以關鍵字RPCFUNC聲明存儲過程
方法二 以DECLARE PROCEDURE語句聲明存儲過程
方法三 以動態SQL語句實現
方法四 調用函數PBDBMS Put Line
一般情況下 方法一能得到較好的運行效率和更完善的功能 因此推薦使用方法一 但是某些類型的存儲過程只能使用其他方法 以下重點介紹方法一和方法二
兩種方法比較起來 有以下幾點主要區別
)方法一適用於具有IN OUT和IN OUT參數的存儲過程 而方法二僅支持IN和OUT參數 不支持IN OUT參數
)方法一對參數的數目無限制 方法二最多支持 個參數
)方法一不支持記錄(Recorder)的傳遞 方法二可傳遞和接收記錄
方法一操作步驟
)在用戶對象畫筆中創建一個Class Standard類型的 從Transaction繼承的用戶對象
)在此用戶對象中 聲明Local External Functions 將存儲過程以RPCFUNC關鍵字聲明為外部函數 在Declare Local External Functions對話框中按Proceres按鈕選擇要調用的後台存儲過程 或直接輸入類似subroutine TEST(long id ref string name)RPCFUNC ALIAS FOR DEVTEST 的語句 例如DEVTEST的參數為(id IN NUMBER name IN OUT VARCHAR )
)保存該用戶對象
)在Application畫筆中 進入應用屬性對話框 在Variable Types頁 將上Transaction用戶對象設置為預設的全局變數SQLCA
)腳本中 編碼調用相應的外部函數 形式 SQLCA函數名(參數) 如可用 SQLCATEST(ln id ls name) 調用例子中定義的DEVTEST存儲過程 其中ln id ls name為調用參數
方法一注意事項
)由於PB中String類型的數據長度是動態分配的 因此對Ref String類型的參數 每次調用前需要申請足夠的空間 例如上例從輸入的id值檢索name 後台聲明的NAME數據類型為VARCHAR ( ) 每次調用SQLCATEST前需要用ls name=SPACE( )置ls name為足夠長度的空串
lishixin/Article/program/PB/201311/24641
❻ 有人用過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語言過程性和結構性的優點,因此使得開發出的應用程序具有高度靈活。
❼ sqlplus如何連接oracle資料庫
方法一:
1、在開始菜單中,找到oracle應用程序開發-SQL PLUS。雙擊SQL PLUS。
❽ otl格式文檔怎麼下載
在使用C++連接資料庫的時候,你可以選擇ODBC或者ADO等方歲棗手式,但是OTL連接資料庫確實挺方便的,它所有的代碼都放在一個頭文件otlv4.h中,我們在寫程序的時候直接將頭文件包含進來,就可以調用其中的類中的函數進行資料庫的連接,增刪改查等操作。最近一直在使用Oracle資料庫,這次就使用OTL連接Oracle資料庫,Oracle資料庫提供一個調用的介面(OCI),是Oracle公司開發的一個應用程序開發工具,是一個通過訪問Oracle資料庫的伺服器,控制各類sql語句的執行,進而創建應用程序介面(API),OTL就是通過OCI對Oracle資料庫進行操作。
下面就是我寫過的一個實際例子,比較簡單,只是為了登錄資料庫,並不進行其他操作,主要目的是學會使用OTL:
1. 所需文件:
首先我們應該從網上下載OTL的源碼也就是 otlv4.h 這個頭文件。
然後打開Oracle的安裝目錄E:\proct\11.2.0\dbhome_1\OCI 找到oci文件夾將整個文件夾拷貝出來,文件夾中包含include文件夾和lib文件夾。
2.示例:
打開VS2008創建一個MFC工程,名稱為mfc_one. (其它的就不多說了,這乎嫌個都很清楚),然後打開工程目錄,將OCI這個文件夾直接拷貝到工程目錄下,在工程目錄下新建一個文件夾OTL,將otlv4.h這個頭文件放進這個文件夾中。
接下來就是配置項目屬性,將文件包含進來,在mfc_oneDlg.h和岩局mfc_oneDlg.cpp中都需要將otlv4.h這個頭文件包含進去 (#include"otlv4.h"
❾ Oracle資料庫 關於連接池一
到目前為目 JDBC 的連結池只是一個介面 沒有真正的實現 JDBC 正在開發中 據報已經支持連結池配譽亂 但JDBC 用了JNDI技術 連結池的配置可以讓一個高手都煩死 目前第三方已經實現的連結池當然是poolman 版對一般用戶來說已經足夠用了 配置也簡單虛瞎 版雖然增加了一些功能 但配置也是採用JNDI 對RMI和EJB不懂的朋友可能很煩 建議用 的了 如果有興趣 自己也可以實現連結池 最關鍵的技術也就是把連結作為參數傳給一個BEAN 用完後返回這個參數連結而不是關閉 下面是一個簡單的實現:DBConnectionManager java程序清單如下 import java io *; import java sql *; import java util *; import java util Date; /** * 管理類DBConnectionManager支持對一個或多個由屬性文件定義的資料庫連接 * 池的訪問 客戶程序可以調用getInstance()方法訪問本類的唯一實例 */ public class DBConnectionManager { static private DBConnectionManager instance; // 唯一實例 static private int clients; private Vector drivers = new Vector(); private PrintWriter log; private Hashtable pools = new Hashtable(); /** * 返回唯一實例 如果是第一次調用此方法 則創建實例 * * @return DBConnectionManager 唯一實例 */ static synchronized public DBConnectionManager getInstance() { if (instance == null) { instance = new DBConnectionManager(); } clients++; return instance; } /** * 建構函數私有以防止其它對象創建本類實例 */ private DBConnectionManager() { init(); } /** * 將連接對象返回給由名字指定的連接池 * * @param name 在屬性文件中定義的連接池名字 * @param con 連接對象\r */ public void freeConnection(String name Connection con) { DBConnectionPool pool = (DBConnectionPool) pools get(name); if (pool != null) { pool freeConnection(con); } } /** * 獲得一個可用的(空閑的)連接 如果沒有可用連接 且已有連接數小於最大連接數 * 限制 則創建並返回新連接 * * @param name 在屬性文件中定義的連接池名字 * @return Connection 可用連接或null */ public Connection getConnection(String name) { DBConnectionPool pool = (DBConnectionPool) pools get(name); if (pool != null) { return pool getConnection(); } return null; } /** * 獲得一個可用連接 若沒有可用連接 且已培檔有連接數小於最大連接數限制 * 則創建並返回新連接 否則 在指定的時間內等待其它線程釋放連接 * * @param name 連接池名字 * @param time 以毫秒計的等待時間\r * @return Connection 可用連接或null */ public Connection getConnection(String name long time) { DBConnectionPool pool = (DBConnectionPool) pools get(name); if (pool != null) { return pool getConnection(time); } return null; } /** * 關閉所有連接 撤銷驅動程序的注冊\r */ public synchronized void release() { // 等待直到最後一個客戶程序調用 if ( clients != ) { return; } Enumeration allPools = pools elements(); while (allPools hasMoreElements()) { DBConnectionPool pool = (DBConnectionPool) allPools nextElement(); pool release(); } Enumeration allDrivers = drivers elements(); while (allDrivers hasMoreElements()) { Driver driver = (Driver) allDrivers nextElement(); try { DriverManager deregisterDriver(driver); log( 撤銷JDBC驅動程序 + driver getClass() getName()+ 的注冊\ ); } catch (SQLException e) { log(e 無法撤銷下列JDBC驅動程序的注冊: + driver getClass() getName()); } } } /** * 根據指定屬性創建連接池實例 * * @param props 連接池屬性 */ private void createPools(Properties props) { Enumeration propNames = props propertyNames(); while (propNames hasMoreElements()) { String name = (String) propNames nextElement(); if (name endsWith( url )) { String poolName = name substring( name lastIndexOf( )); String url = props getProperty(poolName + url ); if (url == null) { log( 沒有為連接池 + poolName + 指定URL ); continue; } String user = props getProperty(poolName + user ); String password = props getProperty(poolName + password ); String maxconn = props getProperty(poolName + maxconn ); int max; try { max = Integer valueOf(maxconn) intValue(); } catch (NumberFormatException e) { log( 錯誤的最大連接數限制: + maxconn + 連接池: + poolName); max = ; } DBConnectionPool pool = new DBConnectionPool(poolName url user password max); pools put(poolName pool); log( 成功創建連接池 + poolName); } } } /** * 讀取屬性完成初始化 */ private void init() { InputStream is = getClass() getResourceAsStream( /db properties ); Properties dbProps = new Properties(); try { dbProps load(is); } catch (Exception e) { System err println( 不能讀取屬性文件 + 請確保db properties在CLASSPATH指定的路徑中 ); return; } String logFile = dbProps getProperty( logfile DBConnectionManager log ); try { log = new PrintWriter(new FileWriter(logFile true) true); } catch (IOException e) { System err println( 無法打開日誌文件: + logFile); log = new PrintWriter(System err); } loadDrivers(dbProps); createPools(dbProps); } /** * 裝載和注冊所有JDBC驅動程序\r * * @param props 屬性 */ private void loadDrivers(Properties props) { String driverClasses = props getProperty( drivers ); StringTokenizer st = new StringTokenizer(driverClasses); while (st hasMoreElements()) { String driverClassName = st nextToken() trim(); try { Driver driver = (Driver) Class forName(driverClassName) newInstance(); DriverManager registerDriver(driver); drivers addElement(driver); log( 成功注冊JDBC驅動程序\ + driverClassName); } catch (Exception e) { log( 無法注冊JDBC驅動程序: + driverClassName + 錯誤: + e); } } } /** * 將文本信息寫入日誌文件 */ private void log(String msg) { log println(new Date() + : + msg); } /** * 將文本信息與異常寫入日誌文件 */ private void log(Throwable e String msg) { log println(new Date() + : + msg); e printStackTrace(log); } /** * 此內部類定義了一個連接池 它能夠根據要求創建新連接 直到預定的最\r lishixin/Article/program/Oracle/201311/17331
❿ c程序通過什麼連接oracle
一般C語言連接oracle資料庫通過使用oracle提供的OCI介面和PROC編程介面兩種方式。
OCI方式純粹是一些函數介面。
PROC是oracle提供的一種C與ORACLE
SQL的混合編程。程序(以.pc為後綴)編好之後,使用oracle提供的proc預編譯程序,將pc文件編譯成c文件(這一過程,相當於將SQL轉換為OCI的介面),然後再使用c語言編譯器生成可以執行文件。
OCI方式不容易入門,它擁有大量的介面函數,要很快熟悉它,非常難。但OCI方式的編程效率很高。
porc方式簡單易用。可用於對性能要求不太高的項目。