文章目录
1 OCCI使用
// 头文件
#include <occi.h>
// occi的接口类在对应的命名空间中
using namespace oracle::occi;
// 使用
1. 初始化一个环境->对应的类: Environment
2. 使用初始化完成的环境对象创建一个连接, 得到一个连接对象: Connection, 通过这个对象可用连接并操作服务器
3. 对数据库的操作: 添删查改(对应相关的sql语句)
- 通过得到的连接数据库的实例对象, 创建一个可以对象数据进行sql操作的一个对象: Statement
4. 如果对数据进行是查询操作, 会得到一个结果集, 这个结果集对应的也是一个类: ResultSet
5. 释放资源
- 结果集资源->ResultSet
- 对数据进行sql操作的对象->Statement
- 销毁连接对象->Connection
- 数据连接环境->Environment
1.1 初始化 - Environment 类
OCCI通过创建一个Environment的对象完成初始化工作。
可以通过Environment创建数据库连接,从而进行其它的操作
要创建Environment,应该调用Environment类的静态方法createEnvironment()
// 环境初始化
Environment* env = Environment::createEnvironment();
// 关闭, 释放资源
Environment::terminateEnvironment(env);
1.2 连接数据库 - Connection 类
连接数据库通过Connection类的对象实例实现
调用Environment类的**createConnection()**方法可以创建一个Connection对象;
// 函数原型:
// 连接串格式: IP:端口/数据库实例名
Connection *Environment::createConnection(
const string &userName,const string &password, const string &connectString );
// 函数调用
const string userName = "scott"; // 用户名
const string passwd = "tiger"; // 密码
const string connstr = "192.168.247.129:1521/orcl"; // 数据库连接串
Connection* conn = env->createConnection(userName, passwd, connstr);
使用**Environment::terminateConnection()**断开连接
// 断开连接
env->terminateConnection(conn);
1.3 执行SQL
Statement 类用于执行SQL语句,并获取返回结果。
ResultSet 类用于处理SELECT 查询的结果。
对于所有类型的数据的绑定或者获取,OCCI都提供了统一的方法
- setXXX 方法用于Statement
- getXXX 方法用于Statement & ResultSet
OCCI会自动处理类型之间的转换。
使用方法:
使用Connection:😗*createStatement()**创建Statement对象, 指定 SQL 命令(DDL/DML/query)作为参数
// 操作函数
Connection::createStatement(string &sql);
Statement::setSQL(string &sql);
Statement::execute(string &sql); // can be used for any SQL, returns status
// 执行一个insert/update/delete
Statement::executeUpdate(string &sql); // returns Insert/Update/Delete count
// 执行一个select语句
Statement::executeQuery(string &sql); // returns ResultSet(结果集)
使用 setXXX 方法传递要绑定用于输入的值
使用合适的execute方法执行SQL
对于SELECT 查询, 使用ResultSet 对象处理返回结果
// 插入操作
Statement *stmt = conn->createStatement(“ insert into Dept(Deptno,Dname, Loc) values (1, ‘ACCOUNTS’, ‘ZONE1’ ”);
stmt->executeUpdate();
conn->terminateStatement(stmt); // 关闭查询, 释放资源
使用绑定参数的DML(数据操作语句)示例:
Statement *stmt = conn->createStatement(“ insert into Emp(EmpNo,Ename) values(:1, :2) ”);
//1 and 2 are bind placeholders
int empno = 2;
string empname = “JOHN W”;
//first parameter is bind position, second is value
stmt->setInt(1, empno);
stmt->setString(2, empname);
stmt->executeUpdate();
执行SELECT查询并处理结果:
Statement *stmt = conn->createStatement(
“select Empno, Ename, Sal from Emp where Hiredate >= :1”);
//automatically converted to Date
stmt->setString(1, “01-JAN-1987”);
//executeQuery returns a ResultSet
ResultSet *rs = stmt->executeQuery();
//ResultSet::next fetches rows and returns FALSE
//when no more rows
while (rs->next() == true)
{
//get values using the getXXX methods of ResultSet
empno = rs->getInt(1);
empname = rs->getString(2);
empsalary = rs->getFloat(3);
}
stmt->closeResultSet(rs);//to free resources

本文详细介绍了OCCI在项目中的应用,包括Environment和Connection类的初始化、数据库操作、Statement和ResultSet的使用,以及如何在ServerOP中封装OCCI并进行秘钥协商过程中的读写操作。
最低0.47元/天 解锁文章
3万+





