C++使用oracle的occi库操作oracle数据库
2016-03-14 14:46
302 查看
版权声明:转自http://blog.csdn.net/dgyanyong/article/details/17144141
// C++使用oracle的occi库操作oracle数据库
//步骤
//1、创建OCCI上下文环境
//2、创建数据库连接
//3、创建Statement对象
//4、执行查询SQL
//5、执行插入SQL
//6、终止Statement对象
//7、断开数据库连接
//8、释放OCCI上下文环境
// 代码示例如下:
[cpp] view
plain copy
#include <string>
using namespace std;
#include "occi.h"
using namespace oracle::occi;
int main(int argc, char *argv[])
{
char szUserName[40]; // 用户名
char szPassword[40]; // 密码
char szConnectString[256]; // 连接字符串
Environment *pEnv = NULL; // OCCI上下文环境
Connection *pConn = NULL; // 数据库连接
Statement *pStmt = NULL; // Statement对象
std::string strTemp;
try {
// 创建OCCI上下文环境
pEnv = Environment::createEnvironment(
Environment::Mode(Environment::OBJECT|Environment::THREADED_MUTEXED));
if (NULL == pEnv) {
printf("createEnvironment error.\n");
return -1;
}
// 创建数据库连接
pConn = pEnv->createConnection(szUserName, szPassword, szConnectString);
if(NULL == pConn) {
printf("createConnection error.\n");
return -1;
}
// 创建Statement对象
pStmt = pConn->createStatement();
if(NULL == pStmt) {
printf("createStatement error.\n");
return -1;
}
//--------查询---------
// 查询数据库时间
ResultSet *pRs = pStmt->executeQuery(
"SELECT TO_CHAR(SYSDATE, 'YYYY-MM-DD HH24:MI:SS') FROM DUAL");
while(pRs->next()) {
strTemp = pRs->getString(1);
printf("db time:%s.\n", strTemp.c_str());
// int类型取值用getInt()
break;
}
pStmt->closeResultSet(pRs);
//--------插入---------
// 指定DML为自动提交
pStmt->setAutoCommit(TRUE);
// 设置执行的SQL语句
pStmt->setSQL("INSERT INTO TA (ID, NAME) VALUES (1, 'ZS')");
// 执行SQL语句
nRet = pStmt->executeUpdate();
if(nRet == 0) {
printf("executeUpdate insert error.\n");
}
//----------------------
// 终止Statement对象
pConn->terminateStatement(pStmt);
// 断开数据库连接
pEnv->terminateConnection(pConn);
// 释放OCCI上下文环境
Environment::terminateEnvironment(pEnv);
}
// 捕获数据库操作异常
catch(SQLException &sqlExcp) {
printf("SQLException %d:%s.\n",
sqlExcp.getErrorCode(), sqlExcp.getMessage().c_str());
return -1;
}
// 捕获其他异常
catch(exception &ex) {
printf("other exception %s.\n", ex.what());
return -1;
}
return 0;
}
// 连接池的用法
// 注意连接池在多线程中使用的时候,操作连接池需要加锁
// 使用连接池的时候,数据库服务器要支持才可以使用。
// 启动数据库服务器连接池
// exec dbms_connection_pool.start_pool;
[cpp] view
plain copy
char szUserName[40]; // 用户名
char szPassword[40]; // 密码
char szConnectPoolString[256]; // 连接字符串
int nMaxConn = 40; // 最大值
int nMinConn = 5; // 初始最小值
int nIncrConn = 1; // 每次增长值
// 1、创建OCCI上下文环境
Environment *pEnv = Environment::createEnvironment(
Environment::Mode(Environment::OBJECT|Environment::THREADED_MUTEXED));
// 2、建立连接池
StatelessConnectionPool *pConnPool = pEnv->createStatelessConnectionPool(
szUserName, szPassword, szConnectPoolString, nMaxConn, nMinConn, nIncrConn);
pConnPool->setTimeOut(5000);
// 3、从连接池获取连接
Connection *pConn = pConnPool->getConnection(
szUserName, szPassword, szConnectPoolString);
// 4、释放连接到连接池
pConn->flushCache();
pConnPool->terminateConnection(pConn);
// 5、释放连接池
pEnv->terminateStatelessConnectionPool(m_pConnPool);
// 6、释放OCCI上下文环境
Environment::terminateEnvironment(pEnv);
// linux下编译、运行
// 1、要在.bash_profile中设置环境变量
// export ORACLE_BASE=/u01
// export ORACLE_HOME=$ORACLE_BASE/oracle
// export LD_LIBRARY_PATH=$ORACLE_HOME/lib:$LD_LIBRARY_PATH
// 2、编译时加上下面的库
// libocci.so
// libclntsh.so
// -locci -lclntsh
// C++使用oracle的occi库操作oracle数据库
//步骤
//1、创建OCCI上下文环境
//2、创建数据库连接
//3、创建Statement对象
//4、执行查询SQL
//5、执行插入SQL
//6、终止Statement对象
//7、断开数据库连接
//8、释放OCCI上下文环境
// 代码示例如下:
[cpp] view
plain copy
#include <string>
using namespace std;
#include "occi.h"
using namespace oracle::occi;
int main(int argc, char *argv[])
{
char szUserName[40]; // 用户名
char szPassword[40]; // 密码
char szConnectString[256]; // 连接字符串
Environment *pEnv = NULL; // OCCI上下文环境
Connection *pConn = NULL; // 数据库连接
Statement *pStmt = NULL; // Statement对象
std::string strTemp;
try {
// 创建OCCI上下文环境
pEnv = Environment::createEnvironment(
Environment::Mode(Environment::OBJECT|Environment::THREADED_MUTEXED));
if (NULL == pEnv) {
printf("createEnvironment error.\n");
return -1;
}
// 创建数据库连接
pConn = pEnv->createConnection(szUserName, szPassword, szConnectString);
if(NULL == pConn) {
printf("createConnection error.\n");
return -1;
}
// 创建Statement对象
pStmt = pConn->createStatement();
if(NULL == pStmt) {
printf("createStatement error.\n");
return -1;
}
//--------查询---------
// 查询数据库时间
ResultSet *pRs = pStmt->executeQuery(
"SELECT TO_CHAR(SYSDATE, 'YYYY-MM-DD HH24:MI:SS') FROM DUAL");
while(pRs->next()) {
strTemp = pRs->getString(1);
printf("db time:%s.\n", strTemp.c_str());
// int类型取值用getInt()
break;
}
pStmt->closeResultSet(pRs);
//--------插入---------
// 指定DML为自动提交
pStmt->setAutoCommit(TRUE);
// 设置执行的SQL语句
pStmt->setSQL("INSERT INTO TA (ID, NAME) VALUES (1, 'ZS')");
// 执行SQL语句
nRet = pStmt->executeUpdate();
if(nRet == 0) {
printf("executeUpdate insert error.\n");
}
//----------------------
// 终止Statement对象
pConn->terminateStatement(pStmt);
// 断开数据库连接
pEnv->terminateConnection(pConn);
// 释放OCCI上下文环境
Environment::terminateEnvironment(pEnv);
}
// 捕获数据库操作异常
catch(SQLException &sqlExcp) {
printf("SQLException %d:%s.\n",
sqlExcp.getErrorCode(), sqlExcp.getMessage().c_str());
return -1;
}
// 捕获其他异常
catch(exception &ex) {
printf("other exception %s.\n", ex.what());
return -1;
}
return 0;
}
// 连接池的用法
// 注意连接池在多线程中使用的时候,操作连接池需要加锁
// 使用连接池的时候,数据库服务器要支持才可以使用。
// 启动数据库服务器连接池
// exec dbms_connection_pool.start_pool;
[cpp] view
plain copy
char szUserName[40]; // 用户名
char szPassword[40]; // 密码
char szConnectPoolString[256]; // 连接字符串
int nMaxConn = 40; // 最大值
int nMinConn = 5; // 初始最小值
int nIncrConn = 1; // 每次增长值
// 1、创建OCCI上下文环境
Environment *pEnv = Environment::createEnvironment(
Environment::Mode(Environment::OBJECT|Environment::THREADED_MUTEXED));
// 2、建立连接池
StatelessConnectionPool *pConnPool = pEnv->createStatelessConnectionPool(
szUserName, szPassword, szConnectPoolString, nMaxConn, nMinConn, nIncrConn);
pConnPool->setTimeOut(5000);
// 3、从连接池获取连接
Connection *pConn = pConnPool->getConnection(
szUserName, szPassword, szConnectPoolString);
// 4、释放连接到连接池
pConn->flushCache();
pConnPool->terminateConnection(pConn);
// 5、释放连接池
pEnv->terminateStatelessConnectionPool(m_pConnPool);
// 6、释放OCCI上下文环境
Environment::terminateEnvironment(pEnv);
// linux下编译、运行
// 1、要在.bash_profile中设置环境变量
// export ORACLE_BASE=/u01
// export ORACLE_HOME=$ORACLE_BASE/oracle
// export LD_LIBRARY_PATH=$ORACLE_HOME/lib:$LD_LIBRARY_PATH
// 2、编译时加上下面的库
// libocci.so
// libclntsh.so
// -locci -lclntsh
相关文章推荐
- oracle关于批量修改表空间的方法
- Oracle数据库DBA必备基本技能
- jdbc查询oracle数据库时出现未找到要求的 XXX 关键字可能原因
- AppAssure备份Windows平台Oracle数据库
- 用oracle自带的ssh脚本配置互信
- oracle ora-各种常见java.sql.SQLException归结
- 12C-OCP升级1z-060-002
- GPG key retrieval failed: [Errno 14] Could not open/read file:///etc/pki/rpm-gpg/RPM-GPG-KEY-oracle
- 采用ODAC,ODBC连接Oracle
- db2与oracle区别
- Oracle EBS查看别人提交请求的输出
- oracle归档日志满所引发的问题及解决
- oracle11g导出数据库不完善问题解决
- IE上ORACLE OEM 证书错误 , 导航阻止,无法”继续浏览此网站”
- Oracle数据库监听程序的重要参数
- Oracle 11g 数据类型
- Oracle 常见查询表结构语句
- 阿里云安装oracle没有swap空间建议解决方法
- oracle的常用函数
- oracle表空间查询维护命令大全之二(undo表空间)