Maison > Problème commun > le corps du texte

Oracle a-t-il une API ?

小老鼠
Libérer: 2023-07-06 10:05:04
original
1107 Les gens l'ont consulté

Oracle a une API. Il existe quatre principaux types d'API pour la base de données Oracle : 1. L'API OCI, qui est une interface de programmation en langage C fournie par Oracle ; 2. L'API JDBC, qui est une bibliothèque API pour connecter la base de données Oracle en langage Java ; qui est fourni par la spécification Microsoft Unified API pour connecter diverses bases de données ; 4. API .NET, etc.

Oracle a-t-il une API ?

L'environnement d'exploitation de ce tutoriel : système Windows 10, Oracle version 19c, ordinateur Dell G3.

Ces dernières années, la base de données Oracle est devenue de plus en plus largement utilisée et est devenue le premier choix pour de nombreux systèmes d'applications d'entreprise. En tant que développeur, il est très important de maîtriser les compétences de développement d'API de base de données Oracle. Cet article présentera le contenu du développement de l'API Oracle et fournira quelques exemples pratiques.

1. Introduction

Nom complet de l'API (Application Programming Interface), qui est une interface de programmation d'application. En termes simples, l'API est l'interface permettant aux applications logicielles d'interagir avec le monde extérieur. Grâce à l'API, l'interaction et les appels de données externes peuvent être réalisés, ainsi que la transmission de données et la communication entre diverses applications et systèmes.

Il existe quatre catégories principales d'API de base de données Oracle :

(1) API OCI : Oracle Call Interface, qui est une interface de programmation en langage C fournie par Oracle.

(2) API JDBC : Java Database Connectivity, est une bibliothèque API permettant de connecter la base de données Oracle dans le langage Java.

(3) API ODBC : Open Database Connectivity est une spécification API unifiée fournie par Microsoft pour connecter diverses bases de données.

(4) API .NET : bibliothèque API fournie par Microsoft .NET Framework pour se connecter à la base de données Oracle.

Ici, nous présenterons principalement l'API OCI.

2. API OCI

L'API OCI est Oracle Call Interface, qui est l'interface de programmation en langage C de la base de données Oracle. L'API OCI est une bibliothèque d'API efficace et puissante qui prend en charge plusieurs langues.

OCI implémente l'interaction avec la base de données Oracle en fournissant un ensemble de fonctions de bibliothèque à l'application et en permettant à l'application d'appeler ces fonctions au moment de l'exécution. Le modèle de programmation d'OCI est similaire à la bibliothèque de fonctions d'E/S standard du langage C, ce qui permet aux programmeurs utilisant le langage C de démarrer rapidement.

Le package d'installation OCI peut être trouvé sur le site officiel d'Oracle ou sur le CD d'installation d'Oracle. Après l'installation, ajoutez include, lib, oraclnt.dll dans le répertoire où se trouve OCI à votre projet.

Si vous utilisez VS Code, vous pouvez utiliser Visual Studio Code pour intégrer les opérations Oracle Database afin d'intégrer l'API OCI dans l'application.

Jetons un coup d'œil à quelques exemples pratiques d'utilisation de l'API OCI.

3. Exemples d'utilisation de l'API OCI

3.1 Connexion à la base de données Oracle

La connexion à la base de données Oracle est l'une des opérations les plus élémentaires de l'API OCI. Examinons d'abord un code simple pour se connecter à la base de données 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;
}
Copier après la connexion

Le code ci-dessus utilise OCI pour se connecter à la base de données Oracle et implémenter des opérations de requête de données via les descripteurs d'instructions OCI.

3.2 Insérer des données

L'API OCI peut utiliser les fonctions OCIStmtPrepare et OCIStmtExecute pour insérer des données dans la base de données. Le code est le suivant :

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],
Copier après la connexion

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!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal