Luis Neri was kind enough to translate my "Getting Started with OCCI (Windows Version)" post into Spanish. Below is his translation of the original post. Thanks very much to Luis for this. However, please note that I do not speak Spanish, so I won't be able to respond to any comments in that language. - Mark La Oracle C++ Call Interface, también conocida como OCCI, es una API construida sobre otras API's de bajo nivel de Oracle. Uno de los objetivos de OCCI es ofrecer a los programadores de C++ una forma de acceso fácil a las bases de datos de Oracle en una forma similar a la que tienen los programadores de Java con "Java Database Connectivity (JDBC) ". Este documento trata de dar una vista rápida para empezar con esta tecnología, la cual puede ser incorporada a los desarrollos y aplicaciones GIS del SIRAN; si se desea, existe más información en la documentación en línea de Oracle. http://download.oracle.com/docs/cd/B28359_01/appdev.111/b28390/toc.htm Este "Empezando con OCCI" tiene el objeto de dar un método para la puesta del ambiente el cual usa OCCI en los desarrollos con C++ bajo Windows para acceder a las bases de datos de Oracle. El ambiente El ambiente en que se realizarón las pruebas para la puesta en funcionamiento de esta tecnología es el que abajo se detalla, tenga en cuenta que a este ambiente se pueden hacer pequeñas adaptaciones para que funcione en el suyo en particular. Información importante Uno de las características más importantes al trabajar con OCCI es que se debe asegurar que todos los componentes del ambiente de desarrollo y de runtime están soportados en las combinaciones y tener las versiones correctas. Se hace un fuerte énfasis en esto, si usted no observa con atención esta recomendación seguramente encontrara problemas. Para lograr esto por favor encuentre las combinaciones correctas de las versiones en la pagina de Oracle Technology Network (OTN). Descargue los componentes correctos Al momento de escribir este documento se encontraron para el ambiente descrito arriba los siguientes componentes Estos componentes se deben descargar en la máquina de desarrollo. Yo lo hice en el escritorio. Instalación de Instant Client La instalación es tan simple como descomprimir el archivo, descomprímalo sobre C:\ , el resultado será una carpeta C:\instantclient_11_1 con las subcarpetas "sdk", "vc8" y "vc7", las cuales no serán utilizadas en el desarrollo sobre nuestro ambiente. Instalación del OCCI Package Al igual que la instalación de Instant Client, los paquetes Occi pueden ser descomprimidos, pero sin embargo en vez de crear un directorio sobre c:\, los descomprimí sobre el escritorio, una vez descomprimidos, me desvié un poco de lo quel archivo occivc9_111060_readme.txt dice, y realice los siguiente: Cree un directorio "vc9" dentro del directorio "sdk" como sigue: C:\instantclient_11_1\sdk\lib\msvc\vc9 Cree una carpeta "vc9" dentro de "instantclient_11_1" como sigue: C:\instantclient_11_1\vc9 Borre el archivo oraocci11.dll y oraocci11.sym del directorio C:\instantclient_11_1. Estos archives no están hechos para construir o compilar con Visual Studio 2008 y como se dijo anteriormente es importante que se empaten las versiones. Se extrajeron los archivos OCCI en la carpeta del escritorio moviendo los dos archivos a la carpeta C:\instantclient_11_1\sdk\lib\msvc\vc9 antes creada: de la misma carpeta en el escritorio, se mueven los siguientes archivos a la carpeta C:\instantclient_11_1\vc9 antes creada: Finalmente se borra el archivo oraocci11.lib de: C:\instantclient_11_1\sdk\lib\msvc Otra vez este archivo no es compatible con nuestro ambiente. Despues de realizar estos pasos, los archivos .lib deben estar bajo la carpeta C:\instantclient_11_1\sdk\lib\msvc y los archivos .dll y .manifest deben estar bajo la carpeta C:\instantclient_11_1. Esto pasos parecen trabajo extra, pero resultan de una separación completa de las varias versiones OCCI y lo hace más fácil y explicito. Para especificar que versión de librerías OCCI usar, añada estas carpetas al path del sistema. Estas dos carpetas deben estar al inicio del path: C:\instantclient_11_1\vc9;C:\instantclient_11_1;{y lo demás del path…} Configuración de Visual Studio El ambiente Windows ha sido configurado para el uso de los nuevos paquetes OCCI y Instan Client (los adecuados para nuestro ambiente), pero antes de empezar un desarrollo en Visual Studio, es necesario establecer algunas opciones. Sin estas opciones Visual Studio es incapaz de encontrar los archivos correctos y construir aplicaciones. Hay dos opciones las cuales necesitan ser especificadas: UsandoVisual C++ 2008, las rutas de menu donde se especifican estas opciones son: Cree un proyecto simple de prueba Ya que se ha hecho todo la puesta en funcionamiento el ambiente está configurado!, Utilice la siguiente proyecto como prueba para verificar que todo funciona como se espera. Otra vez, este es un simple ejemplo para verificar que las cosas funcionan correctamente. No es un templeate de desarrollo. Cree en Visual C++ 2008 un proyecto seleccionando File –> New –> Project… del menú principal, seleccione "Win32" como tipo de proyecto, seleccione "Win32 Console Application", dele un nombre al proyecto (yo usé prueba_occi), seleccione un carpeta donde guardar deseleccione "Create directory for solution", y presione OK. Presione Next en el Wizard, deseleccione Precompiled header, presione Empty project, y presione Finish. En el explorador de la solucion, click-izquierdo en Header Files, seleccione Add, seleccione New Item… En Add New Item, seleccione Header File (.h), introduzca Employees.h (o cualquier otro nombre) en nombre y presione Add. /* #include <occi.h> using namespace oracle::occi; class Employees { void List(); private: string user; en Solution Explorer, click-izquierdo en Source Files, seleccione Add, seleccione New Item… en Add New Item, seleccione C++ File (.cpp), introduzca Employees.cpp ((o cualquier otro nombre) en nombre y presione Add. Este es el contenido de mi archivo en el sistema: /* #include "Employees.h" using namespace std; int main (void) Employees *pEmployees = new Employees(); pEmployees->List(); delete pEmployees; cout << "ENTER to continue..."; cin.get(); return 0; Employees::Employees() user = "hr"; env = Environment::createEnvironment(Environment::DEFAULT); try exit(EXIT_FAILURE); Employees::~Employees() Environment::terminateEnvironment (env); void Employees::List() Statement *stmt = NULL; try if (stmt) rs = stmt->executeQuery(); if (rs) while (rs->next()) { cout << endl; stmt->closeResultSet(rs); con->terminateStatement(stmt); Antes de construir el ejemplo (build), se necesita añadir la librería OCCI a la lista de entradas del linker: Seleccione Project –> prueba_occi Properties... del menu (Sustituya el nombre por el proio si es necesario) Expanda el nodo Configuration Properties, expanda el nodo Linker, seleccione Input item, introduzca "oraocci11d.lib" para debug build o "oraocci11.lib" para release build. Seleccione Build –> Build Solution del menú para construir la solución. Si todo está puesto correctamente no debería haber errores. Si existen error busque donde pueden estar y corrija. La pantalla de ejecución seria como esta: ID FIRST NAME LAST NAME [ snip ] 120 Matthew Weiss ENTER to continue... Si eres nuevo en el uso de OCCI sobre Windows con Visual Studio 2008, quizá el ejemplo de arriba puede ser de ayuda al inicio.
* A simple OCCI test application
* This file contains the Employees class declaration
*/
#include <iostream>
#include <iomanip>
using namespace std;
public:
Employees();
virtual ~Employees();
Environment *env;
Connection *con;
string passwd;
string db;
};
* A simple OCCI test application
* This file contains the Employees class implementation
*/
using namespace oracle::occi;
{
/*
* create an instance of the Employees class,
* invoke the List member, delete the instance,
* and prompt to continue...
*/
}
{
/*
* connect to the test database as the HR
* sample user and use the EZCONNECT method
* of specifying the connect string. Be sure
* to adjust for your environment! The format
* of the string is host:port/service_name
*/
passwd = "hr";
db = "oel01:1521/OEL11GR1.SAND";
{
con = env->createConnection(user, passwd, db);
}
catch (SQLException& ex)
{
cout << ex.getMessage();
}
}
{
env->terminateConnection (con);
}
{
/*
* simple test method to select data from
* the employees table and display the results
*/
ResultSet *rs = NULL;
string sql = "select employee_id, first_name, last_name " \
"from employees order by last_name, first_name";
{
stmt = con->createStatement(sql);
}
catch (SQLException& ex)
{
cout << ex.getMessage();
}
{
try
{
stmt->setPrefetchRowCount(32);
}
catch (SQLException& ex)
{
cout << ex.getMessage();
}
{
cout << endl << setw(8) << left << "ID"
<< setw(22) << left << "FIRST NAME"
<< setw(27) << left << "LAST NAME"
<< endl;
cout << setw(8) << left << "======"
<< setw(22) << left << "===================="
<< setw(27) << left << "========================="
<< endl;
cout << setw(8) << left << rs->getString(1)
<< setw(22) << left << (rs->isNull(2) ? "n/a" : rs->getString(2))
<< setw(27) << left << rs->getString(3)
<< endl;
}
}
}
}
====== ==================== =========================
174 Ellen Abel
166 Sundar Ande
130 Mozhe Atkinson
105 David Austin
204 Hermann Baer
116 Shelli Baida
167 Amit Banda
172 Elizabeth Bates
200 Jennifer Whalen
149 Eleni Zlotkey
Tuesday, July 28, 2009
Empezando con OCCI
oraocci11.lib
oraocci11d.lib
Include files – permite a Visual Studio encontrar los header files para OCCI
Library files – permite a Visual Studio encontrar los library files para OCCI
Tools –> Options… expanda el nodo "Projects and Solutions", seleccione "VC++ Directories", bajo "Show directories for:" seleccione "Include files", doble-click bajo la ultima entrada para abrir una nueva pantalla e introduzca la ruta "C:\instantclient_11_1\sdk\include" presione enter
Bajo "Show directories for:" seleccione"Library files", doble-click bajo la ultima entrada para abrir una nueva pantalla e introduzca la ruta "C:\instantclient_11_1\sdk\lib\msvc\vc9" and presione enter
Presione OK para guardar las opciones.
Posted by Mark Williams at 6:43 PM