#include
#include
int main()
{
OCIEnv *env;
OCISvcCtx *svc;
OCIError *err;
OCIStmt *stmt;
OCIParam *parm;
OCIDefine *def;
ub4 i, num_cols;
sword rc;
text *username = "user";
text *password = "passwd";
text *db = "db.example.com:1521/dbname";
rc = OCIEnvCreate(&env, OCI_DEFAULT, 0, 0, 0, 0, 0, 0); // 初始化环境
rc = OCIHandleAlloc(env, (dvoid **)&err, OCI_HTYPE_ERROR, 0, 0); // 创建错误句柄
rc = OCIHandleAlloc(env, (dvoid **)&svc, OCI_HTYPE_SVCCTX, 0, 0); // 创建服务句柄
rc = OCILogon2(env, err, &svc, username, strlen(username), password, strlen(password), db, strlen(db), OCI_LOGON_SYSDBA); // 登录到数据库
rc = OCIHandleAlloc(env, (dvoid **)&stmt, OCI_HTYPE_STMT, 0, 0); // 创建语句句柄
rc = OCIStmtPrepare(stmt, err, (text *)"SELECT * FROM example", strlen("SELECT * FROM example"), OCI_NTV_SYNTAX, OCI_DEFAULT); // 准备语句
rc = OCIStmtExecute(svc, stmt, err, 0, 0, 0, 0, OCI_DEFAULT); // 执行语句
rc = OCIStmtFetch(stmt, err, 1, OCI_FETCH_NEXT, OCI_DEFAULT); // 获取结果
while (rc != OCI_NO_DATA)
{
rc = OCIStmtGetPieceInfo(stmt, err, &parm, &num_cols, &i, OCI_HTYPE_DEFINE, OCI_DEFAULT); // 获取字段数
for (i = 1; i
在这个例子中,我们首先调用OCIEnvCreate函数来初始化环境。接着,我们使用OCILogon2函数来登录到数据库。在这个函数中,我们提供了用户名、密码以及数据库地址。一旦我们登录到了数据库,我们就可以使用OCIStmtPrepare函数来准备SQL语句。接着,我们使用OCIStmtExecute函数来执行语句,并使用OCIStmtFetch函数来获取查询结果。最终,我们使用OCILogoff函数来注销数据库。
除了查询,我们还可以使用oracle oci来执行其他的数据库操作,如插入、更新、删除等操作。以下是一个例子,它可以用来在名为“example”的表格中插入一行:
#include
#include
int main()
{
OCIEnv *env;
OCISvcCtx *svc;
OCIError *err;
OCIStmt *stmt;
ub4 i, num_cols;
sword rc;
text *username = "user";
text *password = "passwd";
text *db = "db.example.com:1521/dbname";
rc = OCIEnvCreate(&env, OCI_DEFAULT, 0, 0, 0, 0, 0, 0); // 初始化环境
rc = OCIHandleAlloc(env, (dvoid **)&err, OCI_HTYPE_ERROR, 0, 0); // 创建错误句柄
rc = OCIHandleAlloc(env, (dvoid **)&svc, OCI_HTYPE_SVCCTX, 0, 0); // 创建服务句柄
rc = OCILogon2(env, err, &svc, username, strlen(username), password, strlen(password), db, strlen(db), OCI_LOGON_SYSDBA); // 登录到数据库
rc = OCIHandleAlloc(env, (dvoid **)&stmt, OCI_HTYPE_STMT, 0, 0); // 创建语句句柄
rc = OCIStmtPrepare(stmt, err, (text *)"INSERT INTO example VALUES(:1, :2, :3)", strlen("INSERT INTO example VALUES(:1, :2, :3)"), OCI_NTV_SYNTAX, OCI_DEFAULT); // 准备语句
char name[20] = "John";
char age[3] = "21";
char gender[7] = "male";
OCIBind *bnd1, *bnd2, *bnd3;
rc = OCIBindByPos(stmt, &bnd1, err, 1, (dvoid *)&name, sizeof(name), SQLT_STR, 0, 0, 0, 0, 0, OCI_DEFAULT); // 绑定参数1
rc = OCIBindByPos(stmt, &bnd2, err, 2, (dvoid *)&age, sizeof(age), SQLT_STR, 0, 0, 0, 0, 0, OCI_DEFAULT); // 绑定参数2
rc = OCIBindByPos(stmt, &bnd3, err, 3, (dvoid *)&gender, sizeof(gender), SQLT_STR, 0, 0, 0, 0, 0, OCI_DEFAULT); // 绑定参数3
rc = OCIStmtExecute(svc, stmt, err, 1, 0, 0, 0, OCI_DEFAULT); // 执行语句
rc = OCIHandleFree(stmt, OCI_HTYPE_STMT); // 释放语句句柄
rc = OCILogoff(svc, env, err); // 注销数据库
return 0;
}
在这个例子中,我们首先使用OCIStmtPrepare函数来准备SQL语句。这次,我们使用了绑定变量来填充我们的查询。接着,我们使用OCIBindByPos函数来为每个绑定变量指定值。最终,我们使用OCIStmtExecute函数来执行语句并将数据插入到数据库中。
总结来说,oracle oci是一个强大的c语言库,可以帮助我们连接到oracle数据库,并对其进行各种操作。使用oracle oci,我们可以方便地执行查询、插入、更新、删除等操作,并通过丰富的api来掌控数据库操作。通过本文所提供的例子,我们可以更好地掌握oracle oci的使用方法。