Heim >Backend-Entwicklung >C++ >Verwendung der Oracle-Datenbank in C++ und ihres Beispielcodes

Verwendung der Oracle-Datenbank in C++ und ihres Beispielcodes

王林
王林Original
2023-08-22 15:57:331914Durchsuche

Verwendung der Oracle-Datenbank in C++ und ihres Beispielcodes

Oracle ist ein leistungsstarkes relationales Datenbankverwaltungssystem. Die Verwendung einer Oracle-Datenbank in C++ kann uns dabei helfen, die Datenbank effizienter zu verwalten. In diesem Artikel wird die Verwendung der Oracle-Datenbank und des zugehörigen Beispielcodes in C++ vorgestellt.

1. Installieren und konfigurieren Sie den Oracle-Datenbanktreiber

Bevor Sie die Oracle-Datenbank verwenden, müssen Sie den entsprechenden Oracle-Treiber installieren. Oracle stellt offiziell ODBC-Treiber zur Verfügung, die wir von der offiziellen Website herunterladen und installieren können.

Nachdem die Installation abgeschlossen ist, gehen Sie zu Systemsteuerung -> Verwaltungstools -> Sie können den ODBC-Treiber unter „Treiber“ sehen. Wir müssen den entsprechenden Treiber auswählen und konfigurieren.

Geben Sie unter „Datenquellenname“ den Alias ​​der Oracle-Datenbank ein, zu der Sie eine Verbindung herstellen möchten, beispielsweise „orcl“. Geben Sie unter „Servername“ den Hostnamen oder die IP-Adresse für die Verbindung zur Datenbank ein. Geben Sie unter „Benutzer-ID“ den Benutzernamen für die Verbindung zur Datenbank und unter „Passwort“ das entsprechende Passwort ein. Klicken Sie auf die Schaltfläche „Verbindung testen“. Wenn die Meldung „Verbindung erfolgreich“ angezeigt wird, ist die Verbindung erfolgreich.

2. Verwendung der Oracle-Datenbank

Um die Oracle-Datenbank in C++ zu verwenden, müssen Sie die Oracle-Header-Datei einführen und relevante Einstellungen vornehmen.

1. Einbindung der Header-Dateien

Zuerst müssen Sie die Header-Dateien oci.h und oci.cpp einbinden. Diese beiden Header-Dateien befinden sich im Verzeichnis OCI/include im Oracle-Installationsverzeichnis.

2. Oracle-Bibliotheksdateien verknüpfen

Sie müssen Oracle-Bibliotheksdateien verknüpfen, einschließlich oci.lib, ociw32.lib und orannzsbb11.dll usw.

3. OCI-Handle erstellen

OCI-Handle ist ein von Oracle bereitgestellter Speicherverwaltungsmechanismus. Das OCI-Handle wird verwendet, um die Verbindung und Interaktion zwischen der OCILIB-Bibliothek und Oracle-Diensten (SQL-Anweisungen) zu verwalten.

Wenn Sie das OCI-Handle verwenden, müssen Sie es zuerst beantragen und es dann nach Bedarf konfigurieren. Zu den häufig verwendeten OCI-Handles gehören:
(1) Umgebungshandle: OCIEnv.
(2) Service-Handle: OCISvcCtx.
(3) Sitzungshandle: OCISession.
(4) Anweisungshandle: OCIStmt.
(5) Ergebnissatz-Handle: OCIDefine, OCIParam.

Der folgende Code ist für das OCI-Umgebungshandle, Service-Handle, Sitzungshandle und Anweisungshandle anzuwenden:

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 Stellen Sie eine Verbindung zur Oracle-Datenbank her.

Sie müssen zuerst den Dienstnamen von OCIServer festlegen und dann OCILogon2 aufrufen Funktion zum Herstellen einer Verbindung zur Oracle-Datenbank. Das Folgende ist der Code zum Herstellen einer Verbindung zur Oracle-Datenbank:

//设置服务名称
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 SQL-Anweisungen ausführen

Sie müssen das OCIStmt-Handle und das OCIDefine-Handle verwenden, um die SQL-Anweisung auszuführen. Das OCIStmt-Handle wird zum Vorbereiten von SQL-Anweisungen verwendet, und das OCIDefine-Handle wird zum Definieren von Ausgabevariablen verwendet.
Das Folgende ist der Code zum Ausführen der SQL-Anweisung:

//定义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. Beispielcode

Das Folgende ist der vollständige Code zum Herstellen einer Verbindung zur Oracle-Datenbank und zum Ausführen der SQL-Anweisung:

#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;
}

Das Obige ist die Verwendung der Oracle-Datenbank und seinen Beispielcode in C++, ich hoffe, dass er allen hilfreich sein wird.

Das obige ist der detaillierte Inhalt vonVerwendung der Oracle-Datenbank in C++ und ihres Beispielcodes. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn