C++ 및 해당 샘플 코드에서 Oracle 데이터베이스 사용
Oracle은 강력한 관계형 데이터베이스 관리 시스템입니다. C++에서 Oracle 데이터베이스를 사용하면 데이터베이스를 보다 효율적으로 관리할 수 있습니다. 이 기사에서는 C++에서 Oracle 데이터베이스 및 관련 샘플 코드를 사용하는 방법을 소개합니다.
1. Oracle 데이터베이스 드라이버 설치 및 구성
Oracle 데이터베이스를 사용하기 전에 해당 Oracle 드라이버를 설치해야 합니다. Oracle은 공식 웹사이트에서 다운로드하여 설치할 수 있는 ODBC 드라이버를 공식적으로 제공합니다.
설치가 완료되면 제어판 -> 관리 도구 -> 데이터 소스(ODBC)로 이동하세요. "드라이버"에서 ODBC 드라이버를 볼 수 있습니다. 해당 드라이버를 선택하고 구성해야 합니다.
"데이터 소스 이름"에 "orcl"과 같이 연결하려는 Oracle 데이터베이스의 별칭을 입력하세요. "서버 이름"에 데이터베이스에 연결할 호스트 이름이나 IP 주소를 입력합니다. "사용자 ID"에 데이터베이스에 접속하기 위한 사용자 이름을 입력하고, 비밀번호에 해당 비밀번호를 입력하세요. "연결 테스트" 버튼을 클릭하면 "연결 성공" 메시지가 나타나면 연결이 성공한 것입니다.
2. Oracle 데이터베이스 사용
C++에서 Oracle 데이터베이스를 사용하려면 oracle 헤더 파일을 도입하고 관련 설정을 지정해야 합니다.
1. 헤더 파일 포함
먼저 oci.h 및 oci.cpp 헤더 파일을 포함해야 합니다. 이 두 헤더 파일은 Oracle 설치 디렉터리 아래의 OCI/include 디렉터리에 있습니다.
2. Oracle 라이브러리 파일 연결
oci.lib, ociw32.lib 및 orannzsbb11.dll 등을 포함한 Oracle 라이브러리 파일을 연결해야 합니다.
3. OCI 핸들 생성
OCI 핸들은 Oracle에서 제공하는 메모리 관리 메커니즘입니다. OCI 핸들은 OCILIB 라이브러리와 Oracle 서비스(SQL 문) 간의 연결 및 상호 작용을 관리하는 데 사용됩니다.
OCI 핸들을 사용할 때에는 먼저 신청한 후 필요에 따라 구성해야 합니다. 일반적으로 사용되는 OCI 핸들은 다음과 같습니다:
(1) 환경 핸들: OCIEnv.
(2) 서비스 핸들: OCISvcCtx.
(3) 세션 핸들: OCISession.
(4) 명령문 핸들: OCIStmt.
(5) 결과 세트 핸들: OCIDefine, OCIParam.
다음은 OCI 환경 핸들, 서비스 핸들, 세션 핸들, 명령문 핸들을 적용하는 코드입니다.
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. Oracle 데이터베이스에 연결합니다.
먼저 OCIServer의 서비스 이름을 설정한 후 OCILogon2를 호출해야 합니다. Oracle 데이터베이스에 연결하는 기능입니다. 다음은 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. SQL 문 실행
SQL 문을 실행하려면 OCIStmt 핸들과 OCIDefine 핸들을 사용해야 합니다. OCIStmt 핸들은 SQL 문을 준비하는 데 사용되고 OCIDefine 핸들은 출력 변수를 정의하는 데 사용됩니다.
다음은 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. 샘플 코드
다음은 Oracle 데이터베이스에 접속하여 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; }
위는 Oracle 데이터베이스를 사용한 예입니다. 그리고 C++로 작성된 샘플 코드가 모든 사람에게 도움이 되기를 바랍니다.
위 내용은 C++ 및 해당 샘플 코드에서 Oracle 데이터베이스 사용의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











Oracle Rac Hard Disk New 및 교체 작업 : 하드 디스크 추가 : 새 디스크 추가, ASM 디스크 그룹 생성, 클러스터에 추가하고 데이터 파일을 이동합니다. 하드 디스크 교체 : 실패 하드 디스크 식별, 디스크 그룹을 닫고, 하드 디스크를 교체하고, 디스크 그룹을 다시 열고, 실패한 디스크를 수리하고, 데이터 파일을 이동하십시오.

Oracle Garbled 문제는 일반적으로 부적절한 캐릭터 세트 설정으로 인해 발생합니다. 솔루션에는 다음이 포함됩니다 : 서버, 데이터베이스 및 클라이언트 문자 세트 확인. 필요에 따라 서버, 데이터베이스 및 클라이언트 문자 세트를 설정하십시오. 변환 함수 또는 dbms_lob.convert_lob 함수를 사용하여 Barlled 데이터를 수정하십시오. 항상 문자 세트를 지정하고 NLS 매개 변수를 올바르게 설정하십시오.

Oracle은 여러 가지 중복 제거 쿼리 방법을 제공합니다. 별개의 키워드는 각 열에 고유 한 값을 반환합니다. 그룹 별 조항은 결과를 그룹화하고 각 그룹에 대해 비 반복 값을 반환합니다. 고유 한 키워드는 고유 한 행만 포함 된 인덱스를 만드는 데 사용되며 인덱스 쿼리는 자동으로 망상됩니다. row_number () 함수는 고유 한 숫자를 할당하고 1 행 만 포함하는 결과를 필터링합니다. 최소 () 또는 max () 함수는 숫자 열의 비 반복 값을 반환합니다. 교차 연산자는 두 결과 세트의 공통 값을 반환합니다 (중복 없음).

Oracle 테이블 스페이스 크기를 쿼리하려면 다음 단계를 따르십시오. 쿼리를 실행하여 테이블 스페이스 이름을 결정하십시오. 쿼리를 실행하여 테이블 스페이스 크기를 쿼리하십시오. sum (bytes)을 total_size, sum (bytes_free)으로 sum (bytes_free), sum (bytes) - sum (bytes_free)으로 dba_data_fices where tablespace_.

Oracle 클라이언트를 통해 클라우드 서버에 연결하는 단계는 다음과 같습니다. SSH 키를 만들고 공개 키를 클라우드 서버에 복사하십시오. Oracle 클라이언트를 구성하고 클라우드 서버의 연결 정보를 tnsnames.ora 파일에 추가하십시오. Oracle 클라이언트에서 새 데이터베이스 연결을 작성하고 사용자 이름, 비밀번호 및 DSN을 입력하십시오. 확인을 클릭하고 연결이 성공했는지 확인하십시오.

Oracle Database는 신뢰할 수 있고 확장 가능하며 기능이 풍부한 관계형 데이터베이스 관리 시스템 (RDBMS)입니다. 이 아키텍처는 서버 측 구성 요소 (Oracle Net), 인스턴스, 공유 메모리 영역 (SGA), 배경 프로세스 및 데이터를 저장하는 데이터베이스 파일을 포함한 클라이언트 서버 모델을 따릅니다. 기본 개념에는 테이블, 행, 열, 기본 키, 외국 키, 인덱스 및 커서가 포함됩니다. 데이터베이스는 고 가용성, 빅 데이터 지원, 풍부한 기능, 강력한 보안 및 사용 편의성과 같은 장점으로 유명합니다.

Oracle 문자 세트를 수정하려면 다음을 수행해야합니다. 데이터베이스 백업; init.ora 파일에서 문자 세트 설정을 수정합니다. 데이터베이스를 다시 시작하십시오. 기존 테이블과 열을 수정하여 새 문자 세트를 사용하십시오. 데이터를 다시로드하십시오. 데이터베이스 링크 (선택 사항)를 수정하십시오.

저장된 절차는 데이터베이스에 저장 될 수 있으며 별도의 단위로 반복적으로 호출 될 수있는 SQL 문의 세트입니다. 매개 변수 (In, Out, Inout)를 수락하고 코드 재사용, 보안, 성능 및 모듈성의 장점을 제공 할 수 있습니다. 예 : 저장된 프로 시저를 작성하여 Calculate_sum 두 숫자의 합을 계산하고 Out 매개 변수에 저장하십시오.
