Welcome to Dream.In.Code
Getting C++ Help is Easy!

Join 132,423 C++ Programmers for FREE! Get instant access to thousands of C++ experts, tutorials, code snippets, and more! There are 1,452 people online right now. Registration is fast and FREE... Join Now!




How to connect C++ with Oracle.

 
Reply to this topicStart new topic

> How to connect C++ with Oracle.

Rating  5
Shishir191
*



post 24 Jul, 2007 - 04:05 AM
Post #1


Oracle C++ Call Interface (OCCI) is an Application Programming Interface (API) that provides C++ applications access to data in an Oracle database. This API is a significant improvement to the Oracle Call Interface (OCI) API as far as ease of use is concerned. Engineers who have written JDBC (Java Database Connectivity) code will find the OCCI API to be quite similar to that of JDBC.

The table that is used in the example code is:

create table EMP

(empno NUMBER,

ename VARCHAR2(10),

hireDate Date);

Database Query

This program expain how to select the contents of the EMP table.


CODE


#include <DbManager.h>
#include <iostream>

using namespace std;

using namespace oracle::occi;

const string sqlString("select empno, ename, hiredate from emp");

const string dateFormat("DD-MON-YYYY HH24:MI:SS");

int main(int argc, char **argv)
{
  if (argc != 2)
  {
    cerr << "\nUsage: " << argv[0] << " <db-user-name>\n" << endl;
    exit(1);
  }

  string userName = argv[1];

  // Initialize OracleServices

  DbManager* dbm = NULL;

  OracleServices* oras = NULL;

  Statement *stmt = NULL;

  ResultSet *resultSet = NULL;

  try

  {

    // Obtain OracleServices object with the default args.

    // The default args creates OracleServices with an environment of

    // Environment::OBJECT|Environment::THREADED_MUTEXED

    dbm = new DbManager(userName);

    oras = dbm->getOracleServices();

    // Obtain a cached connection

    Connection * conn = oras->connection();

    // Create a statement

    stmt = conn->createStatement(sqlString);

    int empno;

    string ename;

    Date hireDate;

    string dateAsString;

    // Execute query to get a resultset

    resultSet = stmt->executeQuery();

    while (resultSet->next())
    {
      empno = resultSet->getInt(1);  // get the first column returned by the query;

      ename = resultSet->getString(2);  // get the second column returned by the query

      hireDate = resultSet->getDate(3);  // get the third column returned by the query

      dateAsString="";

      //You cannot check for null until the data has been read

      if (resultSet->isNull(1))

      {

                cout << "Employee num is null... " << endl;

      }

      if (resultSet->isNull(2))

      {

                cout << "Employee name is null..." << endl;

      }

      if (resultSet->isNull(3))

      {

                cout << "Hire date is null..." << endl;

      }
      else
      {
                dateAsString=hireDate.toText(dateFormat);
      }

      cout << empno << "\t" << ename << "\t" << dateAsString << endl;

    }

    // Close ResultSet and Statement

    stmt->closeResultSet(resultSet);

    conn->terminateStatement(stmt);


    // Close Connection and OCCI Environment

    delete dbm;

  }

  catch (SQLException& ex)

  {

    if (dbm != NULL)

    {
        dbm->rollbackActions(ex, stmt, resultSet); // free resources and rollback transaction

    }

  }

  
  return 0;

}


Go to the top of the page
+Quote Post


Register to Make This Ad Go Away!

rbird
*



post 25 Sep, 2008 - 11:50 AM
Post #2
QUOTE(Shishir191 @ 24 Jul, 2007 - 05:05 AM) *

Oracle C++ Call Interface (OCCI) is an Application Programming Interface (API) that provides C++ applications access to data in an Oracle database. This API is a significant improvement to the Oracle Call Interface (OCI) API as far as ease of use is concerned. Engineers who have written JDBC (Java Database Connectivity) code will find the OCCI API to be quite similar to that of JDBC.

The table that is used in the example code is:

create table EMP

(empno NUMBER,

ename VARCHAR2(10),

hireDate Date);

Database Query

This program expain how to select the contents of the EMP table.


CODE


#include <DbManager.h>
#include <iostream>

using namespace std;

using namespace oracle::occi;

const string sqlString("select empno, ename, hiredate from emp");

const string dateFormat("DD-MON-YYYY HH24:MI:SS");

int main(int argc, char **argv)
{
  if (argc != 2)
  {
    cerr << "\nUsage: " << argv[0] << " <db-user-name>\n" << endl;
    exit(1);
  }

  string userName = argv[1];

  // Initialize OracleServices

  DbManager* dbm = NULL;

  OracleServices* oras = NULL;

  Statement *stmt = NULL;

  ResultSet *resultSet = NULL;

  try

  {

    // Obtain OracleServices object with the default args.

    // The default args creates OracleServices with an environment of

    // Environment::OBJECT|Environment::THREADED_MUTEXED

    dbm = new DbManager(userName);

    oras = dbm->getOracleServices();

    // Obtain a cached connection

    Connection * conn = oras->connection();

    // Create a statement

    stmt = conn->createStatement(sqlString);

    int empno;

    string ename;

    Date hireDate;

    string dateAsString;

    // Execute query to get a resultset

    resultSet = stmt->executeQuery();

    while (resultSet->next())
    {
      empno = resultSet->getInt(1);  // get the first column returned by the query;

      ename = resultSet->getString(2);  // get the second column returned by the query

      hireDate = resultSet->getDate(3);  // get the third column returned by the query

      dateAsString="";

      //You cannot check for null until the data has been read

      if (resultSet->isNull(1))

      {

                cout << "Employee num is null... " << endl;

      }

      if (resultSet->isNull(2))

      {

                cout << "Employee name is null..." << endl;

      }

      if (resultSet->isNull(3))

      {

                cout << "Hire date is null..." << endl;

      }
      else
      {
                dateAsString=hireDate.toText(dateFormat);
      }

      cout << empno << "\t" << ename << "\t" << dateAsString << endl;

    }

    // Close ResultSet and Statement

    stmt->closeResultSet(resultSet);

    conn->terminateStatement(stmt);


    // Close Connection and OCCI Environment

    delete dbm;

  }

  catch (SQLException& ex)

  {

    if (dbm != NULL)

    {
        dbm->rollbackActions(ex, stmt, resultSet); // free resources and rollback transaction

    }

  }

  
  return 0;

}



this was easy to follow. however, I can not get it to compile. it can not find #include <DbManager.h>. what type of project should I create this as? Also, will it work in the express edition? thank you
Bob
Go to the top of the page
+Quote Post


Reply to this topicStart new topic
1 User(s) are reading this topic (1 Guests and 0 Anonymous Users)
0 Members:

 

Lo-Fi Version Time is now: 11/22/08 09:44AM

Live C++ Help!

C++ Tutorials

Reference Sheets

C++ Snippets

Bye Bye Ads

Free DIC T-Shirt

T-Shirt Example

Related Sites

Monthly Drawing

Thumb Drive

Partners

Top Contributors

Top 10 Kudos This Month