Maison  >  Article  >  développement back-end  >  Utilisation de la base de données Oracle en C++ et de son exemple de code

Utilisation de la base de données Oracle en C++ et de son exemple de code

王林
王林original
2023-08-22 15:57:331861parcourir

Utilisation de la base de données Oracle en C++ et de son exemple de code

Oracle est un puissant système de gestion de base de données relationnelle. L'utilisation de la base de données Oracle en C++ peut nous aider à gérer la base de données plus efficacement. Cet article explique comment utiliser la base de données Oracle et l'exemple de code associé en C++.

1. Installez et configurez le pilote de base de données Oracle

Avant d'utiliser la base de données Oracle, vous devez installer le pilote Oracle correspondant. Oracle fournit officiellement les pilotes ODBC, que nous pouvons télécharger et installer depuis le site officiel.

Une fois l'installation terminée, accédez à Panneau de configuration -> Outils de gestion -> Source de données (ODBC). Vous pouvez voir le pilote ODBC dans « Pilotes ». Nous devons sélectionner le pilote correspondant et le configurer.

Entrez l'alias de la base de données Oracle à laquelle vous souhaitez vous connecter dans "Nom de la source de données", tel que "orcl". Entrez le nom d'hôte ou l'adresse IP pour vous connecter à la base de données dans "Nom du serveur". Saisissez le nom d'utilisateur pour vous connecter à la base de données dans « ID utilisateur » et saisissez le mot de passe correspondant dans Mot de passe. Cliquez sur le bouton "Test de connexion". S'il affiche "Connexion réussie", la connexion est réussie.

2. Utilisation de la base de données Oracle

Pour utiliser la base de données Oracle en C++, vous devez introduire le fichier d'en-tête Oracle et définir les paramètres appropriés.

1. Inclusion du fichier d'en-tête

Tout d'abord, vous devez inclure les fichiers d'en-tête oci.h et oci.cpp. Ces deux fichiers d'en-tête se trouvent dans le répertoire OCI/include sous le répertoire d'installation d'Oracle.

2. Lier les fichiers de la bibliothèque Oracle

Vous devez lier les fichiers de la bibliothèque Oracle, notamment oci.lib, ociw32.lib et orannzsbb11.dll, etc.

3. Créer un handle OCI

Le handle OCI est un mécanisme de gestion de la mémoire fourni par Oracle. Le handle OCI est utilisé pour gérer la connexion et l'interaction entre la bibliothèque OCILIB et les services Oracle (instructions SQL).

Lorsque vous utilisez le handle OCI, vous devez d'abord en faire la demande, puis le configurer selon vos besoins. Les handles OCI couramment utilisés incluent :
(1) Handle d’environnement : OCIEnv.
(2) Handle de service : OCISvcCtx.
(3) Descripteur de session : OCISession.
(4) Descripteur de déclaration : OCIStmt.
(5) Handle de l’ensemble de résultats : OCIDefine, OCIParam.

Voici le code à appliquer pour le handle d'environnement OCI, le handle de service, le handle de session et le handle d'instruction :

OCIEnv* envhp;
OCIStmt* stmthp;
OCIServer* srvhp;
OCISession* sesshp;

//申请环境句柄
int err = OCIEnvCreate(&envhp, OCI_THREADED|OCI_OBJECT, (dvoid*)0, (dvoid*(*)(dvoid*, size_t))0, (dvoid*(*)(dvoid*, dvoid*, size_t))0, (void(*)(dvoid*, dvoid*))0, (size_t)0, (dvoid**)0);

//申请服务句柄
err = OCIHandleAlloc(envhp, (dvoid**)&srvhp, OCI_HTYPE_SERVER, (size_t)0, (dvoid**)0);

//申请会话句柄
err = OCIHandleAlloc(envhp, (dvoid**)&sesshp, OCI_HTYPE_SESSION, (size_t)0, (dvoid**)0);

//申请语句句柄
err = OCIHandleAlloc(envhp, (dvoid**)&stmthp, OCI_HTYPE_STMT, (size_t)0, (dvoid**)0);

4 Connectez-vous à la base de données Oracle

Vous devez d'abord définir le nom de service d'OCIServer, puis appeler OCILogon2. fonction pour se connecter à la base de données Oracle. Voici le code pour vous connecter à la base de données Oracle :

//设置服务名称
const char* db_name = "orcl";
err = OCIAttrSet(srvhp, OCI_HTYPE_SERVER, (dvoid*)db_name, strlen(db_name), OCI_ATTR_SERVER_NAME, envhp);

//连接数据库
const char* user_name = "scott";//连接的用户名
const char* password = "tiger";//连接的密码
const char* dblink = 0;//连接方式
ub4 dblink_len = 0;
err = OCILogon2(envhp, errhp, &sesshp, (CONST OraText*)user_name, strlen(user_name), (CONST OraText*)password, strlen(password), (CONST OraText*)dblink, (ub4)dblink_len, (CONST OraText*)0, 0);

5. Exécuter les instructions SQL

Vous devez utiliser le handle OCIStmt et le handle OCIDefine pour exécuter l'instruction SQL. Le handle OCIStmt est utilisé pour préparer les instructions SQL et le handle OCIDefine est utilisé pour définir les variables de sortie.
Ce qui suit est le code pour exécuter l'instruction SQL :

//定义SQL语句
const char* sql = "select empno from emp where empno=:1";
err = OCIStmtPrepare(stmthp, errhp, (CONST OraText*)sql, strlen(sql), OCI_NTV_SYNTAX, OCI_DEFAULT);

//绑定输入参数
ub2 empno = 7900;
err = OCIBindByPos(stmthp, &bindhp, errhp, 1, &empno, sizeof(empno), SQLT_INT, 0, 0, 0, 0, 0, OCI_DEFAULT);

//执行SQL语句
err = OCIStmtExecute(svchp, stmthp, errhp, 1, 0, 0, 0, OCI_DEFAULT);

//定义输出变量
ub2 out_empno;
ub2 ind;
sb2 out_len;
ERRCALL(OCIDefineByPos(stmthp, &dfnhp, errhp, 1, (dvoid*)&out_empno, sizeof(out_empno), SQLT_INT, &ind, &out_len, 0, OCI_DEFAULT));

//获取结果
err = OCIStmtFetch(stmthp, errhp, 1, OCI_FETCH_NEXT, OCI_DEFAULT);

3. Exemple de code

Ce qui suit est le code complet pour se connecter à la base de données Oracle et exécuter l'instruction SQL :

#include<iostream>
#include<occi.h>
#include<oci.h>

using namespace std;
using namespace oracle::occi;

int main()
{
    OCIEnv *envhp;
    OCIStmt *stmthp;
    OCIServer *srvhp;
    OCISession *sesshp; 

    // 申请OCI环境句柄
    int err = OCIEnvCreate(&envhp, OCI_THREADED|OCI_OBJECT, (dvoid*)0, (dvoid*(*)(dvoid*, size_t))0, (dvoid*(*)(dvoid*, dvoid*, size_t))0, (void(*)(dvoid*, dvoid*))0, (size_t)0, (dvoid**)0);

    // 申请服务句柄
    err = OCIHandleAlloc(envhp, (dvoid**)&srvhp, OCI_HTYPE_SERVER, (size_t)0, (dvoid**)0);

    // 申请会话句柄
    err = OCIHandleAlloc(envhp, (dvoid**)&sesshp, OCI_HTYPE_SESSION, (size_t)0, (dvoid**)0);

    // 申请语句句柄
    err = OCIHandleAlloc(envhp, (dvoid**)&stmthp, OCI_HTYPE_STMT, (size_t)0, (dvoid**)0);

    // 设置服务名称
    const char* db_name = "orcl";
    err = OCIAttrSet(srvhp, OCI_HTYPE_SERVER, (dvoid*)db_name, strlen(db_name), OCI_ATTR_SERVER_NAME, envhp);

    // 连接数据库
    const char* user_name = "scott";//连接的用户名
    const char* password = "tiger";//连接的密码
    const char* dblink = 0;//连接方式
    ub4 dblink_len = 0;
    err = OCILogon2(envhp, errhp, &sesshp, (CONST OraText*)user_name, strlen(user_name), (CONST OraText*)password, strlen(password), (CONST OraText*)dblink, (ub4)dblink_len, (CONST OraText*)0, 0);

    // 执行SQL语句
    const char* sql = "select empno from emp where empno=:1";
    err = OCIStmtPrepare(stmthp, errhp, (CONST OraText*)sql, strlen(sql), OCI_NTV_SYNTAX, OCI_DEFAULT);

    ub2 empno = 7900;// 输入的empno
    OCIBind* bindhp;
    err = OCIBindByPos(stmthp, &bindhp, errhp, 1, &empno, sizeof(empno), SQLT_INT, 0, 0, 0, 0, 0, OCI_DEFAULT);

    OCIDefine* dfnhp;
    ub2 out_empno;
    ub2 ind;
    sb2 out_len;
    ERRCALL(OCIDefineByPos(stmthp, &dfnhp, errhp, 1, (dvoid*)&out_empno, sizeof(out_empno), SQLT_INT, &ind, &out_len, 0, OCI_DEFAULT));

    err = OCIStmtExecute(svchp, stmthp, errhp, 1, 0, 0, 0, OCI_DEFAULT);

    err = OCIStmtFetch(stmthp, errhp, 1, OCI_FETCH_NEXT, OCI_DEFAULT);
    while(err == OCI_SUCCESS)
    {
        cout << out_empno << endl;
        err = OCIStmtFetch(stmthp, errhp, 1, OCI_FETCH_NEXT, OCI_DEFAULT);
    }

    // 断开连接
    OCILogoff(sesshp, envhp); 
    OCIHandleFree(srvhp, OCI_HTYPE_SERVER);
    OCIHandleFree(sesshp, OCI_HTYPE_SESSION); 
    OCIHandleFree(stmthp, OCI_HTYPE_STMT); 
    OCIHandleFree(envhp, OCI_HTYPE_ENV); 

    return 0;
}

Ce qui précède est l'utilisation de la base de données Oracle et son exemple de code en C++, j'espère qu'il sera utile à tout le monde.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn