女人荫蒂被添全过程13种图片,亚洲+欧美+在线,欧洲精品无码一区二区三区 ,在厨房拨开内裤进入毛片

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

怎么使用OCCI編程?

C語(yǔ)言專家集中營(yíng) ? 來(lái)源:未知 ? 作者:李倩 ? 2018-11-20 16:24 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

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

一,環(huán)境準(zhǔn)備

1.1 默認(rèn)的Oracle安裝中沒(méi)有提供OCCI接口的包,需要我們?cè)贠racle官網(wǎng)下載,地址是:https://www.oracle.com/technetwork/topics/linuxsoft-082809.html

需要安裝下面幾個(gè)內(nèi)容:

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)

直接運(yùn)行 #rpm –i 包名.rpm 安裝即可。

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

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,使得環(huán)境變量立即生效。

二,OCCI編程

Oracle C++調(diào)用接口(OCCI)是一個(gè)易于使用且功能強(qiáng)大的C ++用于訪問(wèn)Oracle對(duì)象關(guān)系數(shù)據(jù)庫(kù)的接口。 OCCI對(duì)象interface是一種無(wú)縫且優(yōu)化的訪問(wèn)和操作機(jī)制來(lái)自數(shù)據(jù)庫(kù)的持久數(shù)據(jù)作為C ++對(duì)象。使用Objects接口和導(dǎo)航訪問(wèn)范例,有一個(gè)單一的對(duì)象模型應(yīng)用程序和數(shù)據(jù)庫(kù)。開發(fā)人員不需要實(shí)現(xiàn)任何用于將數(shù)據(jù)庫(kù)對(duì)象映射到C ++類對(duì)象的附加代碼。這是由OCCI通過(guò)編譯時(shí)生成的代碼和運(yùn)行時(shí)支持完成。結(jié)合Oracle的對(duì)象關(guān)系特性,OCCI和C ++,復(fù)雜和可以開發(fā)強(qiáng)大的面向?qū)ο蟮臄?shù)據(jù)庫(kù)應(yīng)用程序。

OCCI為訪問(wèn)和操作在數(shù)據(jù)庫(kù)中的對(duì)象提供了2種不同的模型。在導(dǎo)航訪問(wèn)模型中(使用Fetch操作),引用數(shù)據(jù)庫(kù)中的對(duì)象到客戶端,如果這些引用被取消或者關(guān)閉時(shí),那么就直接引用客戶端的對(duì)象緩存中。使用引用(作為屬性)和對(duì)對(duì)象之間的關(guān)系進(jìn)行編程,應(yīng)用程序可以引用和取消引用中的關(guān)聯(lián)對(duì)象關(guān)系。在使用導(dǎo)航訪問(wèn)模型的應(yīng)用程序中數(shù)據(jù)庫(kù)變得“不可見(jiàn)”,應(yīng)用程序似乎是“純粹的”C ++程序。

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

在關(guān)聯(lián)訪問(wèn)模型中,SQL查詢和DML語(yǔ)句是執(zhí)行以獲取和更新數(shù)據(jù)庫(kù)中的對(duì)象。 沒(méi)有任何作用關(guān)聯(lián)訪問(wèn)模型中的對(duì)象緩存。

與大多數(shù)C++數(shù)據(jù)庫(kù)編程類似,OCCI也提供了基礎(chǔ)的編程接口,主要是Environment,Connection,ConnectionPool,Statement,ResultSet,MetaData等,這些對(duì)象的調(diào)用關(guān)系如下:

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

1,初始化環(huán)境Environment。在對(duì)象模式下初始化OCCI編程環(huán)境。您的應(yīng)用程序很可能需要在頭文件中包含數(shù)據(jù)庫(kù)對(duì)象的C ++類表示。

2,建立連接Connection。使用環(huán)境句柄建立與數(shù)據(jù)庫(kù)服務(wù)器的連接。

3,準(zhǔn)備SQL語(yǔ)句statement。這是本地(客戶端)步驟,可能包括綁定占位符。在對(duì)象關(guān)系應(yīng)用程序中,此SQL語(yǔ)句應(yīng)該向?qū)ο蠓祷匾茫≧EF)。

4,訪問(wèn)該對(duì)象,將準(zhǔn)備好的語(yǔ)句與數(shù)據(jù)庫(kù)服務(wù)器關(guān)聯(lián),然后執(zhí)行該語(yǔ)句。

5,關(guān)閉對(duì)象,關(guān)閉相關(guān)的ResultSet對(duì)象

6,釋放資源,關(guān)閉statement對(duì)象。

7,斷開鏈接,關(guān)閉Connection

8,封閉環(huán)境,終止Environment對(duì)象。

下面我給大家詳細(xì)介紹這幾個(gè)對(duì)象,以及碰到的注意事項(xiàng)。

2.1.1 Environment對(duì)象

Environment類提供OCCI環(huán)境來(lái)管理OCCI對(duì)象的內(nèi)存和其他資源。應(yīng)用程序可以具有多個(gè)OCCI環(huán)境。每個(gè)環(huán)境都有自己的堆和線程安全互斥體。Environment對(duì)象的方法以及用途如下:

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

我們用的最多的幾個(gè)Environment方法是:

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

createConnection() 用來(lái)創(chuàng)建一個(gè)指向數(shù)據(jù)庫(kù)的鏈接,其調(diào)用方式是:

Connection * createConnection(

const string&userName,

const string&password,

const string&connectString="")=0;

另外還有幾個(gè)重載的函數(shù),

Connection * createConnection(

const string&userName,

const string&password,

const string&connectString,

const string&connectionClass,

constConnection::Purity &purity)=0;

可以用來(lái)創(chuàng)建一個(gè)駐留在連接池的鏈接。如果指定connectionClass參數(shù),則可以創(chuàng)建UTF16的鏈接池,此時(shí)需要在Environment中設(shè)置OCCIUTIF16模式。

createConnectionPool(),創(chuàng)建連接,可以指定UNICODE和非UNICODE的兩種方式。其實(shí)Oracle數(shù)據(jù)庫(kù)包含一個(gè)名為SYS_DEFAULT_CONNECTION_POOL的默認(rèn)連接池。 默認(rèn)情況下,此池已創(chuàng)建,但尚未啟動(dòng)。 要啟用數(shù)據(jù)庫(kù)駐留連接池,必須顯式啟動(dòng)連接池。

您可以使用DBMS_CONNECTION_POOL包中的過(guò)程根據(jù)您的用法配置連接池。在Oracle Real Application Clusters(RAC)環(huán)境中,配置參數(shù)適用于每個(gè)Oracle RAC實(shí)例。

在SQLPlus命令行中,運(yùn)行EXECUTE DBMS_CONNECTION_POOL.START_POOL(); 就可以啟動(dòng)或一個(gè)連接池。

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

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

2.1.2 Connection對(duì)象

Connection類表示與特定數(shù)據(jù)庫(kù)的連接。同時(shí)提供了在連接的上下文中,執(zhí)行SQL語(yǔ)句并返回結(jié)果。其常用的方法有:

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

其中Connection對(duì)象中最常用的方法就是Commit,rollback, CreateStatement, ternminateStatement等,這些方法是必要,也是大家經(jīng)常使用到的,其使用方法和其他的標(biāo)準(zhǔn)SQL方法是一致的,我這里不再贅述了。

2.1.3 Statement對(duì)象

Statement對(duì)象用于執(zhí)行SQL語(yǔ)句。 該語(yǔ)句可以是返回結(jié)果集的查詢,也可以是返回更新計(jì)數(shù)的非查詢語(yǔ)句。 非查詢SQL可以是insert,update或delete語(yǔ)句。 非查詢SQL語(yǔ)句也可以是DML語(yǔ)句(例如create,grant等)或存儲(chǔ)過(guò)程調(diào)用。

查詢,插入/更新/刪除或存儲(chǔ)過(guò)程調(diào)用語(yǔ)句可以具有IN綁定參數(shù),而存儲(chǔ)過(guò)程調(diào)用語(yǔ)句可以具有OUT綁定參數(shù)或綁定IN和OUT參數(shù),稱為IN / OUT參數(shù)。

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

每次創(chuàng)建Statement對(duì)象時(shí),都會(huì)有內(nèi)存和資源等資源必須在客戶端和服務(wù)器端分配游標(biāo)才能存儲(chǔ)該對(duì)象及其數(shù)據(jù)。為了節(jié)省內(nèi)存的重新分配,請(qǐng)嘗試重用Statement對(duì)象。創(chuàng)建Statement對(duì)象后,只需使用它們即可重用它們,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”);

為了節(jié)省更多的內(nèi)存重新分配,可以參數(shù)化將前三個(gè)SQL語(yǔ)句合并為一個(gè),設(shè)置參數(shù),然后執(zhí)行。但是,更改輸入?yún)?shù)類型,因?yàn)楸仨殘?zhí)行重新綁定每次類型改變。以下示例演示了參數(shù)化:

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();

對(duì)于經(jīng)常分批進(jìn)行的一些操作,浪費(fèi)了很多時(shí)間網(wǎng)絡(luò)往返服務(wù)器的通信時(shí)間。 OCCI提供了一個(gè)在單個(gè)網(wǎng)絡(luò)中發(fā)送多行信息的有效機(jī)制往返。此優(yōu)化適用于INSERT,UPDATE和DELETE。首先,您必須設(shè)置最大迭代次數(shù),然后設(shè)置最大值可變長(zhǎng)度參數(shù)的參數(shù)大小。參數(shù)不能更改類型迭代操作。以下是上述INSERT的優(yōu)化形式:

//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對(duì)象

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

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

2.1.5 MetaData對(duì)象

MetaData對(duì)象可用于描述ResultSet中列的類型和屬性,或數(shù)據(jù)庫(kù)中的現(xiàn)有模式對(duì)象。它還提供有關(guān)整個(gè)數(shù)據(jù)庫(kù)的信息。

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

MetaData類為Oracle提供大量的屬性值說(shuō)明,包括表的屬性,列以及數(shù)據(jù)的屬性,我們可以根據(jù)屬性值來(lái)判斷該數(shù)據(jù)庫(kù)對(duì)象的屬性。常用的有:

屬性種類 說(shuō)明
PTYPE_ARG 函數(shù)或者是存儲(chǔ)過(guò)程的參數(shù)
PTYPE_COL 表或者視圖的列
PTYPE_DATABASE 數(shù)據(jù)庫(kù)
PTYPE_FUNC 函數(shù)
PTYPE_PKG
PTYPE_PROC 存儲(chǔ)過(guò)程
PTYPE_SCHEMA SCHEMA
PTYPE_SEQ SEQUENCE
PTYPE_SYN SYNONYM
PTYPE_TABLE
PTYPE_TYPE 類型
PTYPE_TYPE_ARG 類型參數(shù)
PTYPE_TYPE_ATTR 類型屬性
PTYPE_TYPE_COLL 類型集合
PTYPE_TYPE_METHOD 類型方法
PTYPE_TYPE_RESULT 類型結(jié)果
PTYPE_UNK 未知對(duì)象
PTYPE_VIEW 視圖

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

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

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 數(shù)據(jù)庫(kù)
    +關(guān)注

    關(guān)注

    7

    文章

    3910

    瀏覽量

    65994
  • 編程語(yǔ)言
    +關(guān)注

    關(guān)注

    10

    文章

    1955

    瀏覽量

    36422
  • C++
    C++
    +關(guān)注

    關(guān)注

    22

    文章

    2118

    瀏覽量

    75005

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

文章出處:【微信號(hào):C_Expert,微信公眾號(hào):C語(yǔ)言專家集中營(yíng)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    PLC編程軟件使用及基本指令編程練習(xí)

    實(shí)驗(yàn)  編程軟件使用及基本指令編程練習(xí) 一、 實(shí)驗(yàn)?zāi)康?、 熟悉PLC實(shí)驗(yàn)裝置。2、 練習(xí)并掌握編程軟件的使用。
    發(fā)表于 09-29 14:01 ?1.1w次閱讀
    PLC<b class='flag-5'>編程</b>軟件使用及基本指令<b class='flag-5'>編程</b>練習(xí)

    用S7-200編程的幾個(gè)實(shí)例的編程技巧解析

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

    LabVIEW編程技巧

    LabVIEW編程技巧LabVIEW編程技巧LabVIEW編程技巧
    發(fā)表于 02-23 16:59 ?155次下載

    編程進(jìn)階

    關(guān)于keil的編程中,所遇到的相關(guān)問(wèn)題及優(yōu)化,可以在今后的編程中潤(rùn)色自己的編程,優(yōu)化自己的編程風(fēng)格
    發(fā)表于 05-16 14:31 ?2次下載

    linux-網(wǎng)絡(luò)編程-socket編程

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

    使用CCS進(jìn)行DSP編程CCS編程入門

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

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

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

    ABB--codesys軟件編程基礎(chǔ)編程手冊(cè)

    ABB--codesys軟件編程基礎(chǔ)編程手冊(cè)免費(fèi)下載。
    發(fā)表于 05-14 09:46 ?42次下載

    單片機(jī)編程技巧—狀態(tài)機(jī)編程

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

    plc編程是什么 plc編程語(yǔ)言

    PLC編程是指通過(guò)PLC編程軟件,使用PLC編程語(yǔ)言(如Ladder Diagram、Function Block Diagram、Structured Text等)對(duì)PLC進(jìn)行程序設(shè)計(jì)的過(guò)程
    發(fā)表于 04-14 15:44 ?7838次閱讀

    fpga編程與單片機(jī)編程的區(qū)別

    FPGA編程與單片機(jī)編程的主要區(qū)別體現(xiàn)在以下幾個(gè)方面。
    的頭像 發(fā)表于 03-14 17:16 ?1639次閱讀

    編程電源如何編程

    編程電源如何編程? 可編程電源是一種可以調(diào)節(jié)輸出電壓和電流的電源設(shè)備,廣泛應(yīng)用于電子設(shè)備測(cè)試、研發(fā)和生產(chǎn)等領(lǐng)域。通過(guò)編程,用戶可以根據(jù)需要設(shè)置電源的輸出參數(shù),實(shí)現(xiàn)自動(dòng)化測(cè)試和控制。本
    的頭像 發(fā)表于 06-10 15:24 ?2311次閱讀

    PLC的編程方式及編程語(yǔ)言

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

    工業(yè)機(jī)器人的四種編程(示教編程、離線編程、自增強(qiáng)現(xiàn)實(shí)編程編程)剖析!

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

    plc編程語(yǔ)言編程相關(guān)技巧有哪些

    PLC(可編程邏輯控制器)編程語(yǔ)言及相關(guān)編程技巧是工業(yè)自動(dòng)化領(lǐng)域中不可或缺的知識(shí)。 一、PLC編程語(yǔ)言概述 PLC編程語(yǔ)言主要包括梯形圖(L
    的頭像 發(fā)表于 10-21 16:56 ?1045次閱讀
    主站蜘蛛池模板: 桓台县| 余庆县| 凤冈县| 阳原县| 英德市| 白山市| 海城市| 汶川县| 潼关县| 抚松县| 兴城市| 项城市| 疏附县| 新建县| 汝阳县| 尖扎县| 米泉市| 临城县| 营口市| 芷江| 盐山县| 昌图县| 望城县| 京山县| 会泽县| 芦山县| 大足县| 汉源县| 上虞市| 栾川县| 霍林郭勒市| 酒泉市| 江达县| 五指山市| 武鸣县| 丰顺县| 湘潭市| 辽中县| 黄大仙区| 康马县| 衢州市|