Rumah  >  Artikel  >  Adakah Oracle mempunyai API?

Adakah Oracle mempunyai API?

小老鼠
小老鼠asal
2023-07-06 10:05:041051semak imbas

Oracle mempunyai API. Terdapat empat jenis API utama untuk pangkalan data Oracle: 1. OCI API, iaitu antara muka pengaturcaraan bahasa C yang disediakan oleh Oracle 2. JDBC API, iaitu perpustakaan API untuk menyambungkan pangkalan data Oracle dalam bahasa Java; yang disediakan oleh spesifikasi Microsoft Unified API untuk menyambungkan pelbagai pangkalan data 4. .NET API, dsb.

Adakah Oracle mempunyai API?

Persekitaran pengendalian tutorial ini: sistem Windows 10, Oracle versi 19c, komputer Dell G3.

Dalam beberapa tahun kebelakangan ini, pangkalan data Oracle telah semakin digunakan secara meluas dan telah menjadi pilihan pertama untuk banyak sistem aplikasi perusahaan. Sebagai pembangun, adalah sangat penting untuk menguasai kemahiran pembangunan API pangkalan data Oracle. Artikel ini akan memperkenalkan kandungan pembangunan API Oracle dan memberikan beberapa contoh praktikal.

1. Pengenalan

Nama penuh API (Application Programming Interface), iaitu antara muka pengaturcaraan aplikasi. Ringkasnya, API ialah antara muka untuk aplikasi perisian untuk berinteraksi dengan dunia luar Melalui API, interaksi dan panggilan data luaran dapat direalisasikan, dan penghantaran data dan komunikasi antara pelbagai aplikasi dan sistem dapat direalisasikan.

Terdapat empat kategori utama API pangkalan data Oracle:

(1) API OCI: Antara Muka Panggilan Oracle, iaitu antara muka pengaturcaraan bahasa C yang disediakan oleh Oracle.

(2) JDBC API: Java Database Connectivity, ialah perpustakaan API untuk menyambungkan pangkalan data Oracle dalam bahasa Java.

(3) ODBC API: Open Database Connectivity ialah spesifikasi API bersatu yang disediakan oleh Microsoft untuk menyambungkan pelbagai pangkalan data.

(4) .NET API: Pustaka API disediakan oleh Microsoft .NET Framework untuk menyambung ke pangkalan data Oracle.

Di sini, kami akan memperkenalkan OCI API terutamanya.

2. OCI API

OCI API ialah Antara Muka Panggilan Oracle, iaitu antara muka pengaturcaraan bahasa C bagi pangkalan data Oracle. OCI API ialah perpustakaan API yang cekap dan berkuasa yang menyokong berbilang bahasa.

OCI melaksanakan interaksi dengan pangkalan data Oracle dengan menyediakan satu set fungsi perpustakaan kepada aplikasi dan membenarkan aplikasi memanggil fungsi ini pada masa jalan. Model pengaturcaraan OCI adalah serupa dengan perpustakaan fungsi I/O standard dalam bahasa C, jadi pengaturcara dengan bahasa C boleh bermula dengan cepat.

Pakej pemasangan OCI boleh didapati di laman web rasmi Oracle atau CD pemasangan Oracle Selepas pemasangan, tambahkan sertakan, lib, oraclnt.dll dalam direktori tempat OCI terletak pada projek anda.

Jika anda menggunakan Kod VS, anda boleh menggunakan Kod Visual Studio untuk menyepadukan operasi Pangkalan Data Oracle untuk menyepadukan API OCI ke dalam aplikasi.

Mari kita lihat beberapa contoh penggunaan API OCI yang praktikal.

3. Contoh penggunaan API OCI

3.1 Menyambung ke pangkalan data Oracle

Menyambung ke pangkalan data Oracle ialah salah satu operasi API OCI yang paling asas. Mari kita lihat kod mudah untuk menyambung ke pangkalan data Oracle.

#include 
#include 
#include 
#define USERNAME "scott"
#define PASSWORD "tiger"
#define DATABASE "orcl"
#define SQLSTR "select * from emp"
 
int mn(int argc, char *argv[])
{
    OCIEnv *envhp;          // 环境句柄
    OCIError *errhp;        // 错误句柄
    OCISvcCtx *svchp;       // 服务上下文句柄
    OCIServer *srvhp;       // 服务器句柄
    OCISession *authp;      // 验证句柄
    OCIStmt *stmthp;        // 语句句柄
    OCIDefine *defnp;       // 取值句柄
    sword errcode;
    text errbuf[512];
    ub4 errlen;
    ub2 rcount;
    ub4 empno;
 
    if (OCIEnvCreate(&envhp, OCI_DEFAULT, (dvoid *)0, (dvoid *(*)(dvoid *, size_t))0, (dvoid *(*)(dvoid *, dvoid *, size_t))0, (void (*)(dvoid *, dvoid *))0, (size_t)0, (dvoid **)0))
    {
        printf("OCIEnvCreate Error!\n");
        return 0;
    }
 
    OCIHandleAlloc(envhp, (dvoid **)&errhp, OCI_HTYPE_ERROR, 0, (dvoid **)0);
 
    OCIHandleAlloc(envhp, (dvoid **)&svchp, OCI_HTYPE_SVCCTX, 0, (dvoid **)0);
    OCIHandleAlloc(envhp, (dvoid **)&srvhp, OCI_HTYPE_SERVER, 0, (dvoid **)0);
    OCIHandleAlloc(envhp, (dvoid **)&authp, OCI_HTYPE_SESSION, 0, (dvoid **)0);
    OCIHandleAlloc(envhp, (dvoid **)&stmthp, OCI_HTYPE_STMT, 0, (dvoid **)0);
 
    if (OCIServerAttach(srvhp, errhp, (text *)DATABASE, strlen(DATABASE), OCI_DEFAULT) != OCI_SUCCESS)
    {
        OCIErrorGet(errhp, 1, (text *)0, &errcode, errbuf, sizeof(errbuf), OCI_HTYPE_ERROR);
        printf("OCIServerAttach Error: %s\n", errbuf);
        return 0;
    }
 
    OCIAttrSet(svchp, OCI_HTYPE_SVCCTX, (dvoid *)srvhp, (ub4)0, OCI_ATTR_SERVER, errhp);
 
    OCIAttrSet(authp, OCI_HTYPE_SESSION, (dvoid *)USERNAME, strlen(USERNAME), OCI_ATTR_USERNAME, errhp);
    OCIAttrSet(authp, OCI_HTYPE_SESSION, (dvoid *)PASSWORD, strlen(PASSWORD), OCI_ATTR_PASSWORD, errhp);
 
    if (OCISessionBegin(svchp, errhp, authp, OCI_CRED_RDBMS, OCI_DEFAULT))
    {
        OCIErrorGet(errhp, 1, (text *)0, &errcode, errbuf, sizeof(errbuf), OCI_HTYPE_ERROR);
        printf("OCISessionBegin Error:%s\n", errbuf);
        return 0;
    }
 
    OCIAttrSet(svchp, OCI_HTYPE_SVCCTX, (dvoid *)authp, (ub4)0, OCI_ATTR_SESSION, errhp);
 
    if (OCIStmtPrepare(stmthp, errhp, (text *)SQLSTR, strlen(SQLSTR), OCI_NTV_SYNTAX, OCI_DEFAULT))
    {
        OCIErrorGet(errhp, 1, (text *)0, &errcode, errbuf, sizeof(errbuf), OCI_HTYPE_ERROR);
        printf("OCIStmtPrepare Error:%s\n", errbuf);
        return 0;
    }
 
    if (OCIStmtExecute(svchp, stmthp, errhp, 1, 0, NULL, NULL, OCI_STMT_SCROLLABLE_READ_ONLY))
    {
        OCIErrorGet(errhp, 1, (text *)0, &errcode, errbuf, sizeof(errbuf), OCI_HTYPE_ERROR);
        printf("OCIStmtExecute Error:%s\n", errbuf);
        return 0;
    }
 
    while ((errcode = OCIStmtFetch(stmthp, errhp, 1, OCI_FETCH_NEXT, OCI_DEFAULT)) == OCI_SUCCESS)
    {
        OCIAttrGet(stmthp, OCI_HTYPE_STMT, (dvoid *)&empno, NULL, OCI_ATTR_ROWID, errhp);
        printf("%d\n", empno);
    }
 
    OCISessionEnd(svchp, errhp, authp, OCI_DEFAULT);
    OCIServerDetach(srvhp, errhp, OCI_DEFAULT);
 
    OCIHandleFree(errhp, OCI_HTYPE_ERROR);
    OCIHandleFree(srvhp, OCI_HTYPE_SERVER);
    OCIHandleFree(svchp, OCI_HTYPE_SVCCTX);
    OCIHandleFree(authp, OCI_HTYPE_SESSION);
    OCIHandleFree(stmthp, OCI_HTYPE_STMT);
 
    OCIEnvFree(envhp);
 
    return 0;
}

Kod di atas menggunakan OCI untuk menyambung ke pangkalan data Oracle dan melaksanakan operasi pertanyaan data melalui pemegang penyata OCI.

3.2 Masukkan data

OCI API boleh menggunakan fungsi OCIStmtPrepare dan OCIStmtExecute untuk memasukkan data ke dalam pangkalan data. Kodnya adalah seperti berikut:

char *insert_sql = "insert into emp values(:empno, :ename, :job, :mgr, :hiredate, :sal, :comm, :deptno)";
OCIBind *bind[8];
struct tm *p_tm;
time_t tm = time(NULL);
p_tm = localtime(&tm);
OCIDate o_hire;
OCIDateTime *p_hire;
OCIDescriptor *p_dt = NULL;
OCIStmtPrepare(stmthp, errhp, (text *)insert_sql, strlen(insert_sql), OCI_NTV_SYNTAX, OCI_DEFAULT);
OCIDescriptorAlloc(envhp, &p_dt, OCI_DTYPE_TIMESTAMP, 0, NULL);
OCIDateTimeConstruct(envhp, errhp, p_dt, p_tm->tm_year + 1900, p_tm->tm_mon + 1, p_tm->tm_mday, p_tm->tm_hour, p_tm->tm_min, p_tm->tm_sec, 0, NULL, 0);
OCIDateTimeToOracle(envhp, p_dt, &o_hire);
// 绑定 empno 参数
OCIBindByName(stmthp, &bind[0], errhp, (text *)":empno", -1, &empno, sizeof(empno), SQLT_INT, NULL, NULL, NULL, 0, NULL, OCI_DEFAULT);
// 绑定 ename 参数
OCIBindByName(stmthp, &bind[1],

Atas ialah kandungan terperinci Adakah Oracle mempunyai API?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn