Utilice qt para acceder a la base de datos de Oracle en Debian

Dirección original: https://ouonline.net/connecting-to-oracle-with-qt-on-debian

Artículos relacionados

1. Oracle Instant Client para dispositivo Debian basado en ARM ---- https://www.it1352.com/231433.html

2. Siempre piensas que hay arm jdk en github, pero en realidad Oracle ---- https://tieba.baidu.com/p/6571559258

 

 

El proyecto anterior que usaba Oracle no tiene más información desde que instalé la base de datos. Recientemente, se introdujo otro proyecto que también necesita usar Oracle. Dado que Oracle no es de código abierto, para poder usar el acceso qt en Linux, tuve que compilar el controlador correspondiente yo mismo. Busqué un montón de información en Internet, y después de unos días de tirar, finalmente lo logré esta noche. Anótelo aquí.

Permítanme hablar primero sobre el entorno: debian 6.0, qt sdk 4.8.1, oracle 11gR2. Este artículo registra principalmente cómo compilar el controlador y cómo conectarse. Puede consultar una nota anterior sobre algunos problemas en la instalación del lado del servidor de la base de datos de Oracle  .

Listo para trabajar

Descarga el siguiente qt sdk. Debido a que la cadena de herramientas qt y el código fuente deben ser consistentes al compilar, y la versión qt en la fuente debian 6 es 4.6.3, el paquete fuente correspondiente no se puede encontrar en el sitio web oficial, así que descargue la instalación del SDK (el SDK contiene la cadena de herramientas y el código fuente de la versión correspondiente), marque la opción para instalar el código fuente durante la instalación. Aquí, QTDIR se usa para representar el directorio de instalación de qt sdk (esta variable de entorno no es necesaria, solo por conveniencia de la descripción, así que cuando este directorio aparezca debajo, reemplácelo con el directorio de instalación real).

Instale el cliente instantáneo de Oracle (parte del tiempo de ejecución) correspondiente al servidor de Oracle, y el directorio de instalación es ORACLE_CLIENT_HOME (esta variable de entorno no es necesaria, solo por conveniencia de la descripción). Este material contiene principalmente archivos de encabezado y bibliotecas de vínculos dinámicos necesarios para compilar el controlador. El proceso de instalación no se explicará en detalle, me salté todas las indicaciones de error que aparecieron. Si opta por instalar InstantClient, puede encontrar el archivo .así que necesita ejecutarlo más tarde.

La máquina donde se instalan qt sdk y el cliente instantáneo se denomina en adelante cliente, y la máquina donde está instalada la base de datos de Oracle es el servidor (por supuesto, los dos pueden ser la misma máquina).

Compilar el controlador QOCI

La compilación se realiza por cuenta del cliente.

Debido a restricciones de licencia, la versión de código abierto de qt no tiene un controlador de Oracle compilado, pero hay códigos compilados en el código fuente, ubicado (reemplace el número de versión "4.8.1" con el número de versión real):

$QTDIR/QtSources/4.8.1/src/plugins/sqldrivers/oci

El main.cpp y oci.pro en este directorio son los códigos que necesitamos. Busque libclntsh.so, libclntsh.so.10.1 y libclntsh.so.11.1 de $ ORACLE_HOME / lib en el servidor (en realidad, estos tres archivos son lo mismo, los dos primeros son enlaces simbólicos vinculados al tercero), cópielos a este directorio y luego agregue la ubicación del archivo de encabezado y la biblioteca en oci.pro (las últimas 3 líneas):

TARGET = qsqloci

SOURCES = main.cpp
include(../../../sql/drivers/oci/qsql_oci.pri)

include(../qsqldriverbase.pri)

INCLUDEPATH+=$ORACLE_CLIENT_HOME/rdbms/public
INCLUDEPATH+=$QTDIR/QtSources/4.8.1/include
LIBS+= -L. -lclntsh

Luego use el siguiente comando para compilar:

$QTDIR/Desktop/Qt/4.8.1/gcc/bin/qmake oci.pro
make

Si la compilación es exitosa, se generará un libqsqloci.so, que es el controlador que necesitamos.

Conectarse a la base de datos

La prueba se realiza en el cliente. El programa de prueba se coloca en el directorio $ ORACLE_TEST.

Coloque el libqsqloci.so generado anteriormente en el siguiente directorio:

$QTDIR/Desktop/Qt/4.8.1/gcc/plugins/sqldrivers

Luego escriba un programa de prueba (reemplace dbhost, dbusr y dbpasswd con nombres reales):

#include <QSqlDatabase>
#include <QSqlError>
#include <QDebug>
#include <QStringList>

int main(void)
{
    QSqlDatabase db; 

    QStringList drivers = QSqlDatabase::drivers();
    foreach (QString driver, drivers) 
        qDebug() << driver;

    db = QSqlDatabase::addDatabase("QOCI");
    db.setDatabaseName("orcl"); /* default */
    db.setPort(1521);

    db.setHostName("<dbhost>");
    db.setUserName("<dbusr>");
    db.setPassword("<dbpasswd>");

    if (db.open())
        qDebug() << "connect ok";
    else
        qDebug() << db.lastError().text();

    return 0;
}

Ha llegado el momento crítico. Primero mira el Makefile del compilador:

QTPATH := $(QTDIR)/Desktop/Qt/4.8.1/gcc
INCLUDE := -I$(QTPATH)/include -I$(QTPATH)/include/QtCore -I$(QTPATH)/include/QtSql
LIBS := -L$(QTPATH)/lib -lQtCore -lQtSql -L. -lclntsh

TARGET := oracletest

$(TARGET): oracletest.o
        g++ -o $@ $^ $(LIBS)

.cpp.o:
        g++ -c $< $(INCLUDE)

clean:
        rm -f *.o $(TARGET)

Luego establezca las variables de entorno:

export ORACLE_HOME=$ORACLE_CLIENT_HOME
export LD_LIBRARY_PATH=$QTDIR/Desktop/Qt/4.8.1/gcc/lib:$ORACLE_HOME/lib:$LD_LIBRARY_PATH

Aunque esto está en el lado del cliente, todavía tiene que configurar ORACLE_HOME (sí, la variable de entorno en el lado del cliente también se llama así. Si no está configurada, aparecerá un mensaje de error de "QOCIDriver: no se puede crear el entorno". Me tomó una tarde resolver este problema (tiempo).

(Suplemento 2012.09.05) Cuando lo instalé, utilicé el paquete de instalación completo del cliente oracle. La interfaz de instalación contiene 4 opciones: InstantClient, Administrator, Runtime y Custom. Si selecciona InstantClient, puede encontrar varios .so mencionados anteriormente, pero el error "QOCIDriver: no se puede crear el entorno" también aparecerá cuando se ejecute, y se debe reinstalar Runtime, y ORACLE_HOME se establece en Runtime al configurar las variables de entorno. el directorio de instalación en lugar del directorio InstantClient.

Luego compila y ejecuta:

make && ./oracletest

Si todo va bien, el resultado final que ve es similar al siguiente:

"QSQLITE" 
"QOCI8" 
"QOCI" 
connect ok 

posdata

Me tomó más de una hora escribir esta nota, pero la experiencia y el estado de ánimo de los últimos días es muy doloroso, y cuántos desvíos y cuánto tiempo se desperdició. Como usuario que ha utilizado LFS y FVWM, estos dos lanzamientos me hacen que lo último que entienda es cómo el software antisocial, antihumano y anticientífico como Oracle siempre ha existido y vivido bien.

Referencia

[1]  QOCI para Oracle Call Interface (OCI)
[2]  Notas de compilación de QOCI

 Uso y configuración del software  oracle  qt

Comentario (1)

  1. lei

    10 de agosto de 2012 10:11:39

    Oracle y Microsoft tienen estrategias similares, utilizando métodos de cuasi piratería para cultivar el mercado (los medios de instalación de software se pueden descargar desde el sitio web oficial y no hay restricciones, pero no hay parches, cultivo de claves de muy bajo costo para usuarios de referencia de la industria , etc.), formando una amplia gama de desarrollo y uso El equipo de personal y la formación de la influencia de la opinión pública técnica, una vez que un gran número de personas dependen de él para la alimentación, tendrá éxito.
    Por cierto, también confío en él para la comida en este momento.

Supongo que te gusta

Origin blog.csdn.net/xqhrs232/article/details/113657711
Recomendado
Clasificación