在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

怎么使用OCCI編程?

C語言專家集中營 ? 來源:未知 ? 作者:李倩 ? 2018-11-20 16:24 ? 次閱讀

Oracle給各種編程語言都提供了編程接口,其中C++的編程模塊就是OCCI,通過OCCI我們可以很方便的訪問數據的信息,讀取數據庫的屬性,下面我們看看怎么使用OCCI編程。本文使用Centos 7.0為例,Oracle的版本是12.2

一,環境準備

1.1 默認的Oracle安裝中沒有提供OCCI接口的包,需要我們在Oracle官網下載,地址是:https://www.oracle.com/technetwork/topics/linuxsoft-082809.html

需要安裝下面幾個內容:

oracle-instantclient12.2-devel-12.2.0.1.0-1.i386.rpm(606,868 bytes) (cksum - 1259587459)

oracle-instantclient12.2-basic-12.2.0.1.0-1.i386.rpm(49,071,616 bytes) (cksum - 2998080493)

oracle-instantclient12.2-odbc-12.2.0.1.0-2.i386.rpm(223,276 bytes) (cksum - 1211395846)

oracle-instantclient18.3-sqlplus-18.3.0.0.0-1.i386.rpm(689,504 bytes) (cksum - 3705787612)

直接運行 #rpm –i 包名.rpm 安裝即可。

1.2 安裝完成后需要設置環境變量,在~/.bashrc中或者/etc/profile中添加下面的命令設置環境變量。

exportORACLE_HOME=/usr/lib/oracle/12.2/client64

exportTNS_ADMIN=${ORACLE_HOME}/network/admin

exportNLS_LANG='SIMPLIFIED CHINESE_CHINA.AL32UTF8'

# simplifiedchinese_china.UTF8'

exportLD_LIBRARY_PATH=${LD_LIBRARY_PATH}:${ORACLE_HOME}/lib

exportPATH=${ORACLE_HOME}/bin:$PATH

exportHISTTIMEFORMAT="%Y-%m-%d %H:%M:%S "

添加完成后記得source~/.bashrc 或者source /etc/profile,使得環境變量立即生效。

二,OCCI編程

Oracle C++調用接口(OCCI)是一個易于使用且功能強大的C ++用于訪問Oracle對象關系數據庫的接口。 OCCI對象interface是一種無縫且優化的訪問和操作機制來自數據庫的持久數據作為C ++對象。使用Objects接口和導航訪問范例,有一個單一的對象模型應用程序和數據庫。開發人員不需要實現任何用于將數據庫對象映射到C ++類對象的附加代碼。這是由OCCI通過編譯時生成的代碼和運行時支持完成。結合Oracle的對象關系特性,OCCI和C ++,復雜和可以開發強大的面向對象的數據庫應用程序。

OCCI為訪問和操作在數據庫中的對象提供了2種不同的模型。在導航訪問模型中(使用Fetch操作),引用數據庫中的對象到客戶端,如果這些引用被取消或者關閉時,那么就直接引用客戶端的對象緩存中。使用引用(作為屬性)和對對象之間的關系進行編程,應用程序可以引用和取消引用中的關聯對象關系。在使用導航訪問模型的應用程序中數據庫變得“不可見”,應用程序似乎是“純粹的”C ++程序。

在OCCI的導航訪問模型中,客戶端對象緩存在透明的管理數據庫對象(表示為C ++對象)中,應用程序可以立即使用/取消引用,創建/更新/刪除對象。如果一個引用m被應用程序取消,OCCI會搜索緩存中引用的對象,如果存在則返回緩存的對象;如果在緩存中找不到對象,則從數據庫中獲取該對象。這種取消引用過程也被稱為數據庫術語中的混合或固定。提交事務時通過OCCI應用程序,對象緩存刷新所有“臟”(new / updated / deleted)對象到數據庫所在的位置,操作反映在持久性存儲中。對象緩存維護指向C ++對象實例的指針表示相應的數據庫對象。

在關聯訪問模型中,SQL查詢和DML語句是執行以獲取和更新數據庫中的對象。 沒有任何作用關聯訪問模型中的對象緩存。

與大多數C++數據庫編程類似,OCCI也提供了基礎的編程接口,主要是Environment,Connection,ConnectionPool,Statement,ResultSet,MetaData等,這些對象的調用關系如下:

使用OCCI編程遵循以下幾個基本的操作步驟(不可缺省)

1,初始化環境Environment。在對象模式下初始化OCCI編程環境。您的應用程序很可能需要在頭文件中包含數據庫對象的C ++類表示。

2,建立連接Connection。使用環境句柄建立與數據庫服務器的連接。

3,準備SQL語句statement。這是本地(客戶端)步驟,可能包括綁定占位符。在對象關系應用程序中,此SQL語句應該向對象返回引用(REF)。

4,訪問該對象,將準備好的語句與數據庫服務器關聯,然后執行該語句。

5,關閉對象,關閉相關的ResultSet對象

6,釋放資源,關閉statement對象。

7,斷開鏈接,關閉Connection

8,封閉環境,終止Environment對象。

下面我給大家詳細介紹這幾個對象,以及碰到的注意事項。

2.1.1 Environment對象

Environment類提供OCCI環境來管理OCCI對象的內存和其他資源。應用程序可以具有多個OCCI環境。每個環境都有自己的堆和線程安全互斥體。Environment對象的方法以及用途如下:

Method Summary
createConnection() 建立與指定數據庫的連接。
createConnectionPool() 創建連接池。
createEnvironment() 創建一個Environment對象。
createStatelessConnectionPool() 創建無狀態連接池。
enableSubscription() 啟用訂閱通知
disableSubscription() 禁用訂閱通知
getCacheMaxSize() 獲得Cache的最大值。
getCacheOptSize() 獲得緩存最佳堆大小。
getCacheSortedFlush() 獲得緩存排序標志的設置。
getClientVersion() 返回客戶端庫的版本。
getCurrentHeapSize() 返回分配給當前環境中所有對象的當前內存量。
getLDAPAdminContext() 使用LDAP打開通知注冊時返回管理上下文。
getLDAPAuthentication() 使用LDAP打開通知注冊時返回身份驗證模式。
getLDAPHost() 返回運行LDAP服務器的主機。
getLDAPPort() 返回LDAP服務器正在偵聽的端口
getMap() 返回當前環境的Map。
getOCIEnvironment() 返回與當前環境關聯的OCI環境。
getXAConnection() 創建與數據庫的XA連接。
getXAEnvironment() 創建XA Environment對象。
releaseXAConnection() 釋放由getXAConnection()調用分配的所有資源。
releaseXAEnvironment() 釋放getXAEnvironment()調用分配的所有資源。
setCacheMaxSize() 指定客戶端對象緩存的最大大小,以最佳大小的百分比表示。
setCacheOptSize() 指定客戶端對象高速緩存的最佳大小(以字節為單位)。
setCacheSortedFlush() 指定是否在刷新之前按表順序對緩存進行排序。
setLDAPAdminContext() 指定LDAP客戶端的管理上下文。
setLDAPAuthentication() 指定LDAP身份驗證模式。
setLDAPHostAndPort() 指定LDAP服務器主機和端口。
setLDAPLoginNameAndPassword() 指定連接LDAP服務器時的登錄名和密碼。
terminateConnection() 關閉連接并釋放所有相關資源。
terminateConnectionPool() 關閉連接池并釋放所有相關資源。
terminateEnvironment() 關閉環境,釋放所有資源。
terminateStatelessConnectionPool() 關閉無狀態連接池并釋放所有相關資源。

我們用的最多的幾個Environment方法是:

createEnvironment(),創建鏈接環境。創建一個Environment對象。 它是使用setMemMgrFunctions()方法中指定的指定內存管理函數創建的。 如果未指定內存管理器函數,則OCCI使用其自己的默認函數。最終必須關閉Environment對象以釋放它已獲取的所有系統資源。如果指定的模式是THREADED_MUTEXED或THREADED_UNMUTEXED,則所有三個內存管理功能必須是線程安全的。

createConnection() 用來創建一個指向數據庫的鏈接,其調用方式是:

Connection * createConnection(

const string&userName,

const string&password,

const string&connectString="")=0;

另外還有幾個重載的函數,

Connection * createConnection(

const string&userName,

const string&password,

const string&connectString,

const string&connectionClass,

constConnection::Purity &purity)=0;

可以用來創建一個駐留在連接池的鏈接。如果指定connectionClass參數,則可以創建UTF16的鏈接池,此時需要在Environment中設置OCCIUTIF16模式。

createConnectionPool(),創建連接,可以指定UNICODE和非UNICODE的兩種方式。其實Oracle數據庫包含一個名為SYS_DEFAULT_CONNECTION_POOL的默認連接池。 默認情況下,此池已創建,但尚未啟動。 要啟用數據庫駐留連接池,必須顯式啟動連接池。

您可以使用DBMS_CONNECTION_POOL包中的過程根據您的用法配置連接池。在Oracle Real Application Clusters(RAC)環境中,配置參數適用于每個Oracle RAC實例。

在SQLPlus命令行中,運行EXECUTE DBMS_CONNECTION_POOL.START_POOL(); 就可以啟動或一個連接池。

使用 EXECUTE DBMS_CONNECTION_POOL.ALTER_PARAM ('','MINSIZE','10'); 可以配置連接池的參數。

使用 EXECUTE DBMS_CONNECTION_POOL.STOPT_POOL(); 可以關閉連接池。

2.1.2 Connection對象

Connection類表示與特定數據庫的連接。同時提供了在連接的上下文中,執行SQL語句并返回結果。其常用的方法有:

Method Summary
changePassword() 更改當前用戶的密碼。
commit() 提交自上次提交或回滾以來所做的更改,并釋放會話持有的任何數據庫鎖。
createStatement() 創建一個Statement對象來執行SQL語句。
flushCache() 刷新與連接關聯的對象緩存。
getClientCharSet() 返回默認的客戶端字符集。
getClientCharSetUString() 返回UString中啟用全球化的客戶端字符集(UNICODE)。
getClientNCHARCharSet() 返回默認的客戶端NCHAR字符集。
getClientNCHARCharSetUString() 返回UString中啟用全球化的客戶端NCHAR字符集。
getClientVersion() 返回當前客戶端的版本。
getMetaData() 返回可從該連接訪問的對象的元數據。
getOCIServer() 返回與連接關聯的OCI服務器信息。
getOCIServiceContext() 返回與連接關聯的OCI服務上下文。
getOCISession() 返回與連接關聯的OCI Session上下文。
getServerVersion() 以字符串形式返回所使用的Oracle服務器的版本。
getServerVersionUString() 返回使用的Oracle服務器的版本,使用Ustring格式。
getStmtCacheSize() 獲取Statement高速緩存的大小。
getTag() 返回與Connection關聯的標記。
isCached() statement 是否有緩存
pinVectorOfRefs() 在一次往返中將Ref對象的整個向量固定到對象緩存中; 固定對象可通過OUT參數向量獲得。
postToSubscriptions() 發布訂閱通知。
readVectorOfBfiles() 在單個服務器往返中讀取多個Bfiles。
readVectorOfBlobs() 在單個服務器往返中讀取多個Blob。
readVectorOfClobs() 在單個服務器往返中讀取多個Clobs。
registerSubscriptions() 注冊幾個可以進行通知的Subscription
rollback() 回滾自上次提交或回滾以來所做的所有更改,并釋放會話持有的任何數據庫鎖。
setCollectionAccessMode() 根據需要禁用或啟用集合緩存。
setStmtCacheSize() 啟用或禁用Statement緩存。
setTAFNotify() 在Connection對象上注冊故障轉移回調函數。
terminateStatement() 關閉Statement對象并釋放與其關聯的所有資源。
unregisterSubscription() 取消注冊Subscription,關閉其通知。
writeVectorOfBlobs() 在單個服務器往返中寫入多個Blob。
writeVectorOfClobs() 在一個服務器往返中寫入多個Clobs。

其中Connection對象中最常用的方法就是Commit,rollback, CreateStatement, ternminateStatement等,這些方法是必要,也是大家經常使用到的,其使用方法和其他的標準SQL方法是一致的,我這里不再贅述了。

2.1.3 Statement對象

Statement對象用于執行SQL語句。 該語句可以是返回結果集的查詢,也可以是返回更新計數的非查詢語句。 非查詢SQL可以是insert,update或delete語句。 非查詢SQL語句也可以是DML語句(例如create,grant等)或存儲過程調用。

查詢,插入/更新/刪除或存儲過程調用語句可以具有IN綁定參數,而存儲過程調用語句可以具有OUT綁定參數或綁定IN和OUT參數,稱為IN / OUT參數。

Method Description
addIteration() 添加執行的iteration
closeResultSet() 立即釋放結果集的數據庫和OCCI資源,而不是等待自動釋放。
closeStream() 關閉參數流指定的流。
disableCaching() 禁用Statement緩存。
execute() 運行SQL語句。
executeArrayUpdate() 運行插入,更新和刪除,僅使用在setDataBuffer()或綁定參數的流接口的語句。
executeQuery() 運行返回單個ResultSet的SQL語句。
executeUpdate() 運行不返回ResultSet的SQL語句。
getAutoCommit() 返回當前的自動提交狀態。
getBatchErrorMode() 返回批處理錯誤模式的狀態。
getBDouble() 返回IEEE754標準的OUBLE的值作為Double對象。
getBfile() 返回BFILE作為Bfile對象的值。
getBFloat() 返回IEEE754 FLOAT的值作為BFloat對象。
getBlob() 將BLOB的值作為Blob對象返回。
getBytes() 以字節形式返回SQL BINARY或VARBINARY參數的值。
getCharSet() 以字符串形式返回對指定參數有效的字符集。
getCharSetUString() 以UString形式返回對指定參數有效的字符集。
getClob() 將CLOB的值作為Clob對象返回。
getConnection() 返回實例化Statement對象的連接。
getCurrentIteration() 返回正在處理的當前迭代的迭代次數。
getCurrentStreamIteration() 返回要讀取或寫入流數據的當前迭代。
getCurrentStreamParam() 返回必須讀取或寫入的當前輸出Stream的參數索引
getCursor() 返回OUT參數的REF CURSOR值作為ResultSet。
getDatabaseNCHARParam() 返回數據是否為NCHAR字符集。
getDate() 以Date對象的形式返回參數的值
getBDouble() 將參數的值作為IEEE754 double返回。
getDouble() 以C ++ double的形式返回參數的值。
getBFloat() 以IEEE754 float形式返回參數的值。
getFloat() 以C ++ float形式返回參數的值。
getInt() 以C ++ int形式返回參數的值。
getIntervalDS() 以IntervalDS對象的形式返回參數的值。
getIntervalYM() 以IntervalYM對象的形式返回參數的值。
getMaxIterations() 返回當前限制的最大迭代次數。
getMaxParamSize() 返回當前最大參數的大小。
getNumber() 以Number對象的形式返回參數的值。
getObject() 以PObject的形式返回參數的值。
getOCIStatement() 返回與Statement關聯的OCI語句句柄。
getRef() 以REFAny形式返回REF參數的值
getResultSet() 以ResultSet的形式返回當前結果。
getRowid() 將行id參數值作為Bytes對象返回。
getSQL() 返回與Statement對象關聯的當前SQL字符串。
getSQLUString() 返回與Statement對象關聯的當前SQL字符串; UNICODE格式的。
getStream() 以流形式返回參數的值。
getString() 以字符串形式返回參數的值。
getTimestamp() 以Timestamp對象的形式返回參數的值
getUInt() 以C ++ unsigned int的形式返回參數的值
getUpdateCount() 返回當前結果作為非查詢語句的更新計數。
getUString() 返回UString的值。
getVector() 將指定參數作為向量返回。
getVectorOfRefs() 返回當前位置的列作為REF的向量。
isNull() 檢查參數是否為NULL。
isTruncated() 檢查值是否被截斷。
preTruncationLength() 在截斷之前返回參數的實際長度.
registerOutParam() 注冊OUT參數的類型和最大大小.
setAutoCommit() 指定自動提交模式。
setBatchErrorMode() 啟用或禁用批處理錯誤處理模式。
setBDouble() 將參數設置為IEEE雙精度值。
setBfile() 將參數設置為Bfile值。
setBFloat() 將參數設置為IEEE浮點值。
setBinaryStreamMode() 指定將列作為二進制流返回。
setBlob() 將參數設置為Blob值。
setBytes() 將參數設置為Bytes數組。
setCharacterStreamMode() 指定將列作為字符流返回。
setCharSet() 將字符集設置為字符串指定的值。
setCharSetUString() 將字符集設置為UString指定的值。
setClob() 將參數設置為Clob值。
setDate() 將參數設置為Date值。
setDatabaseNCHARParam() 如果數據位于數據庫的NCHAR字符集中,則設置為true; 設置為false以恢復默認值。
setDataBuffer() 指定數據可用于讀取或寫入的數據緩沖區。
setDataBufferArray() 指定數據緩沖區數組,其中數據可用于讀取或寫入。
setDouble() 將參數設置為C ++ double值。
setErrorOnNull() 啟用或禁用讀取NULL值的異常。
setErrorOnTruncate() 發生截斷時啟用或禁用異常。
setFloat() 將參數設置為C ++浮點值。
setInt() 將參數設置為C ++ int值。
setIntervalDS() 將參數設置為IntervalDS值。
setIntervalYM() 將參數設置為IntervalYM值。
setMaxIterations() 設置將為DML語句進行的最大調用次數。
setMaxParamSize() 設置可以從參數發送或返回的最大數據量。
setNull() 將參數設置為SQL NULL。
setNumber() 將參數設置為Number值。
setObject() 使用對象設置參數的值。
setPrefetchMemorySize() 設置OCCI將在內部使用的內存量,以存儲在每次往返服務器期間獲取的數據。
setPrefetchRowCount() 設置每次往返服務器時OCCI將在內部獲取的行數。
setRef() 將參數的值設置為引用。
setRowid() 為綁定位置設置行byte數組格式的rowId
setSQL() 將新的SQL字符串與Statement對象關聯。
setSQLUString() 將新的SQL字符串與Statement對象關聯; UNICODE格式。
setString() 設置指定索引的參數。
setTimestamp() 將參數設置為Timestamp值。
setUInt() 將參數設置為C ++ unsigned int值。
setUString() 設置指定索引的參數,UNICODE格式。
setVector() 將參數設置為unsigned int的向量。
setVectorOfRefs() 將參數設置為矢量,如果類型是REF的集合時使用。
status() 返回語句的當前狀態。 當要寫入流數據時很有用。

每次創建Statement對象時,都會有內存和資源等資源必須在客戶端和服務器端分配游標才能存儲該對象及其數據。為了節省內存的重新分配,請嘗試重用Statement對象。創建Statement對象后,只需使用它們即可重用它們,setSQL方法,如下例所示

Connection* conn = env->createConnection();

Statement* stmt = conn->createStatement();

stmt->setSQL(“INSERT INTO fruit_basket_tab VALUES(‘Apples’,3)”);

stmt->executeUpdate();

stmt->setSQL(“INSERT INTO fruit_basket_tabVALUES(‘Oranges’, 4)”);

stmt->executeUpdate();

stmt->setSQL(“INSERT INTO fruit_basket_tabVALUES(‘Bananas’, 1)”);

stmt->executeUpdate();'

stmt->setSQL(“SELECT * FROM fruit_basket_tab WHEREquantity > 2”);

為了節省更多的內存重新分配,可以參數化將前三個SQL語句合并為一個,設置參數,然后執行。但是,更改輸入參數類型,因為必須執行重新綁定每次類型改變。以下示例演示了參數化:

stmt->setSQL(“INSERT INTOfruit_basket_tab VALUES(:1, :2)”);

stmt->setString( 1, “Apples” );

stmt->setInt( 2, 3 );

stmt->executeUpdate();

stmt->setString( 1, “Oranges” );

stmt->setInt( 2, 4 );

stmt->executeUpdate();

stmt->setString( 1, “Bananas” );

stmt->setInt( 2, 1 );

stmt->executeUpdate();

對于經常分批進行的一些操作,浪費了很多時間網絡往返服務器的通信時間。 OCCI提供了一個在單個網絡中發送多行信息的有效機制往返。此優化適用于INSERT,UPDATE和DELETE。首先,您必須設置最大迭代次數,然后設置最大值可變長度參數的參數大小。參數不能更改類型迭代操作。以下是上述INSERT的優化形式:

//prepare the batching process

stmt->setMaxIterations( 3 );

stmt->setMaxParamSize( 1, 8 );

//”Bananas” is longest param

//批處理操作開始。

stmt->setSQL(“INSERT INTOfruit_basket_tab VALUES(:1, :2)”);

stmt->setString( 1, “Apples” );

stmt->setInt( 2, 3 );

stmt->addIteration(); // 添加迭代子。

stmt->setString( 1, “Oranges” );

stmt->setInt( 2, 4 );

stmt->addIteration();

stmt->setString( 1, “Bananas” );

stmt->setInt( 2, 1 );

//execute the statements

stmt->executeUpdate();

2.1.4 ResultSet對象

ResultSet提供對通過執行Statement生成的數據表的訪問。按行順序檢索表行。在一行中,可以按任何順序訪問列值。ResultSet維護指向其當前數據行的游標。最初,光標位于第一行之前。下一個方法將光標移動到下一行。getxxx()方法檢索當前行的列值。您可以使用列的索引號檢索值。列從1開始編號。對于getxxx()方法,OCCI嘗試將基礎數據轉換為指定的C ++類型并返回C ++值。 SQL類型使用ResultSet ::getxxx()方法映射到C ++類型。ResultSet列的數量,類型和屬性由getColumnListMetaData()方法返回的MetaData對象提供。其常用的方法有:

Method Description
cancel() 取消ResultSet.
closeStream() 關閉指定的流對象。
getBDouble() 以BDouble的形式返回當前行中列的值。
getBfile() 以Bfile形式返回當前行中列的值.
getBFloat() 以BFloat形式返回當前行中列的值.
getBlob() 以Blob對象的形式返回當前行中列的值.
getBytes() 以Bytes數組的形式返回當前行中列的值。
getCharSet() 返回將獲取數據的字符集。
getCharSetUString() 返回將數據作為UString提取的字符集。
getClob() 以Clob對象的形式返回當前行中列的值。
getColumnListMetaData() 將結果集列的描述信息作為MetaData對象返回。
getCurrentStreamColumn() 返回當前可讀Stream的列索引.
getCurrentStreamRow() 返回正在處理的ResultSet的當前行。
getCursor() 獲取ResultSet的嵌套游標。
getDate() 以Date對象的形式返回當前行中列的值。
getDatabaseNCHARParam() 返回數據是否為NCHAR字符集。
getDouble() 以C ++ double的形式返回當前行中列的值。
getFloat() 以C ++ float形式返回當前行中列的值.
getInt() 以C ++ int的形式返回當前行中列的值。
getIntervalDS() 以IntervalDS的形式返回當前行中列的值。
getIntervalYM() 以IntervalYM形式返回當前行中列的值。
getMaxColumnSize() 返回列的最大值。
getNumArrayRows() 返回上次數組提取中獲取的實際行數。
getNumber() 以Number對象的形式返回當前行中列的值。
getObject() 以PObject的形式返回當前行中列的值。
getRef() 返回當前行中列的值作為Ref.
getRowid() 返回SELECT FOR UPDATE語句的當前ROWID。
getRowPosition() 返回當前行位置的行id。
getStatement() 返回ResultSet的Statement。
getStream() 以Stream形式返回當前行中列的值。
getString() 以字符串形式返回當前行中列的值。
getTimestamp() 以Timestamp對象的形式返回當前行中列的值。
getUInt() 以C ++ unsigned int的形式返回當前行中列的值
getUString() 以UString形式返回當前行中列的值。
getVector() 將指定的collection參數作為向量返回。
getVectorOfRefs() 返回當前位置的列作為Refs的向量。
isNull() 當前值是否是空。
isTruncated() 當前值是否被切割。
next() 使下一行成為ResultSet中的當前行。
preTruncationLength() 在截斷之前返回參數的實際長度。
setBinaryStreamMode() 指定將列作為二進制流返回。
setCharacterStreamMode() 指定將列作為字符流返回。
setCharSet() 指定要在其中返回數據的字符集。
setCharSetUString() 指定要在其中返回數據的字符集,UNICODE格式。
setDatabaseNCHARParam() 如果要從包含數據庫的NCHAR字符集中的數據的列檢索參數,則必須通過傳遞true值來通知OCCI。
setDataBuffer() 指定要將數據提取到的數據緩沖區,或者收集和分散綁定和定義的數據。
setErrorOnNull() 讀取NULL值時啟用或禁用異常。
setErrorOnTruncate() 發生截斷時啟用或禁用異常。
setMaxColumnSize() 指定列的最大數據量。
status() 返回ResultSet的當前狀態。

2.1.5 MetaData對象

MetaData對象可用于描述ResultSet中列的類型和屬性,或數據庫中的現有模式對象。它還提供有關整個數據庫的信息。

Method Description
getAttributeCount() 獲取屬性的個數作
getAttributeId() 獲取指定屬性的ID
getAttributeType() 返回屬性類型。
getBoolean() 以C ++布爾值的形式獲取屬性的值。
getInt() 獲取C++ int的屬性值。
getMetaData() 獲取屬性的MetaData對象
getNumber() 以Number對象的形式返回指定的屬性。
getRef() 以Ref 的形式獲取屬性的值。
getString() 獲取String的屬性值。
getTimeStamp() 獲取Timestamp的屬性值
getUInt() 獲取C ++ unsigned int的屬性值。
getUString() 獲取UString的屬性值。
getVector() 獲取C ++向量的屬性值。
operator=() 將一個元數據對象分配給另一個。

MetaData類為Oracle提供大量的屬性值說明,包括表的屬性,列以及數據的屬性,我們可以根據屬性值來判斷該數據庫對象的屬性。常用的有:

屬性種類 說明
PTYPE_ARG 函數或者是存儲過程的參數
PTYPE_COL 表或者視圖的列
PTYPE_DATABASE 數據庫
PTYPE_FUNC 函數
PTYPE_PKG
PTYPE_PROC 存儲過程
PTYPE_SCHEMA SCHEMA
PTYPE_SEQ SEQUENCE
PTYPE_SYN SYNONYM
PTYPE_TABLE
PTYPE_TYPE 類型
PTYPE_TYPE_ARG 類型參數
PTYPE_TYPE_ATTR 類型屬性
PTYPE_TYPE_COLL 類型集合
PTYPE_TYPE_METHOD 類型方法
PTYPE_TYPE_RESULT 類型結果
PTYPE_UNK 未知對象
PTYPE_VIEW 視圖

具體的類型值的說明可以參考Oracle的官方文檔。

在數據庫編程中,OCCI其實用的不是非常多,也就造成了在實際應用中可以查詢的資料不多,往往給編程者帶了困難。作者在多次踩坑以后總結出上述資料,比較詳細的介紹OCCI編程中常用的對象。希望可以和大家保持溝通和交流,互相學習和提高, 更多的C++知識,請關注《C語言專家集中營》。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 數據庫
    +關注

    關注

    7

    文章

    3840

    瀏覽量

    64544
  • 編程語言
    +關注

    關注

    10

    文章

    1949

    瀏覽量

    34850
  • C++
    C++
    +關注

    關注

    22

    文章

    2113

    瀏覽量

    73742

原文標題:Linux下的Oracle C++編程(OCCI)

文章出處:【微信號:C_Expert,微信公眾號:C語言專家集中營】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    PLC編程軟件使用及基本指令編程練習

    實驗  編程軟件使用及基本指令編程練習 一、 實驗目的1、 熟悉PLC實驗裝置。2、 練習并掌握編程軟件的使用。
    發表于 09-29 14:01 ?1w次閱讀
    PLC<b class='flag-5'>編程</b>軟件使用及基本指令<b class='flag-5'>編程</b>練習

    用S7-200編程的幾個實例的編程技巧解析

    PLC編程技巧編程技巧編程技巧編程技巧編程技巧編程技巧
    發表于 11-19 13:46 ?0次下載

    LabVIEW編程技巧

    LabVIEW編程技巧LabVIEW編程技巧LabVIEW編程技巧
    發表于 02-23 16:59 ?151次下載

    編程進階

    關于keil的編程中,所遇到的相關問題及優化,可以在今后的編程中潤色自己的編程,優化自己的編程風格
    發表于 05-16 14:31 ?2次下載

    linux-網絡編程-socket編程

    linux開發編程教程資料——linux-網絡編程-socket編程,感興趣的小伙伴們可以看一看。
    發表于 08-23 16:23 ?0次下載

    使用CCS進行DSP編程CCS編程入門

    使用CCS進行DSP編程CCS編程入門
    發表于 10-19 09:23 ?36次下載
    使用CCS進行DSP<b class='flag-5'>編程</b>CCS<b class='flag-5'>編程</b>入門

    PLC編程是什么?圖解PLC編程入門教程

    本文開始介紹了PLC編程的概念和PLC編程的七大特點,其次闡述了PLC編程工作原理與PLC的五種標準編程語言,最后介紹了PLC編程入門教程。
    發表于 04-19 08:42 ?7w次閱讀
    PLC<b class='flag-5'>編程</b>是什么?圖解PLC<b class='flag-5'>編程</b>入門教程

    ABB--codesys軟件編程基礎編程手冊

    ABB--codesys軟件編程基礎編程手冊免費下載。
    發表于 05-14 09:46 ?42次下載

    單片機編程技巧—狀態機編程

    學會一種好的編程框架或者一種編程思想,可能會受用終生!比如模塊化編程,框架式編程,狀態機編程等等,都是一種好的框架。
    發表于 02-08 16:08 ?12次下載
    單片機<b class='flag-5'>編程</b>技巧—狀態機<b class='flag-5'>編程</b>

    plc編程是什么 plc編程語言

    PLC編程是指通過PLC編程軟件,使用PLC編程語言(如Ladder Diagram、Function Block Diagram、Structured Text等)對PLC進行程序設計的過程
    發表于 04-14 15:44 ?7075次閱讀

    fpga編程與單片機編程的區別

    FPGA編程與單片機編程的主要區別體現在以下幾個方面。
    的頭像 發表于 03-14 17:16 ?1057次閱讀

    編程電源如何編程

    編程電源如何編程? 可編程電源是一種可以調節輸出電壓和電流的電源設備,廣泛應用于電子設備測試、研發和生產等領域。通過編程,用戶可以根據需要設置電源的輸出參數,實現自動化測試和控制。本
    的頭像 發表于 06-10 15:24 ?1437次閱讀

    PLC的編程方式及編程語言

    在工業自動化領域,PLC(Programmable Logic Controller,可編程邏輯控制器)因其強大的控制功能和靈活的編程方式而得到了廣泛應用。PLC的編程方式和編程語言是
    的頭像 發表于 06-27 14:08 ?850次閱讀

    工業機器人的四種編程(示教編程、離線編程、自增強現實編程編程)剖析!

    當前機器人廣泛應用于焊接、裝配、搬運、噴漆及打磨等領域,任務的復雜程度不斷增加,而用戶對產品的質量、效率的追求越來越高。在這種形式下,機器人的編程方式、編程效率和質量顯得越來越重要。降低編程的難度
    的頭像 發表于 08-30 12:14 ?2925次閱讀
    工業機器人的四種<b class='flag-5'>編程</b>(示教<b class='flag-5'>編程</b>、離線<b class='flag-5'>編程</b>、自增強現實<b class='flag-5'>編程</b>主<b class='flag-5'>編程</b>)剖析!

    plc編程語言編程相關技巧有哪些

    PLC(可編程邏輯控制器)編程語言及相關編程技巧是工業自動化領域中不可或缺的知識。 一、PLC編程語言概述 PLC編程語言主要包括梯形圖(L
    的頭像 發表于 10-21 16:56 ?404次閱讀
    主站蜘蛛池模板: 一级毛片西西人体44rt高清| 能可以直接看的av网址| 天天插天天爱| 天天干2018| 久久久久久国产精品mv| 国内精品网站| 全亚洲最大的777io影院| 97dyy影院理论片| 视频在线二区| 亚洲三级电影| 上一篇26p国模| 欧美性受一区二区三区| 久久久久久久综合色一本| 国产日韩精品一区二区三区| 手机看片神马午夜片| 亚洲乱强| 美女扒开腿让男生桶爽网站| 亚洲免费人成在线视频观看| 色婷婷中文字幕| 久久夜色精品国产飘飘| www.青草视频| 欧美黄色免费大片| 黄色国产| 亚洲字幕久久| 欧美三级一区| 6969精品视频在线观看| 免费看欧美理论片在线| 激情综合丝袜美女一区二区| 高h污快穿文汁水四溅| 四虎影院一区二区| 黄 色 录像成 人播放免费99网| 亚洲理论在线观看| 成人爽a毛片在线视频| 男人的午夜影院| 色拍视频| a理论片| 国产人成午夜免视频网站| 色婷婷激情五月| 三级黄色在线视频中文| 操碰人人| 午夜手机福利|