Exemple de code Java pour acquérir et afficher les données source et de destination DBLINK dans Oracle Database à l'aide de DBLINK

Il s'agit d'un exemple de code Java qui récupère et affiche les données source et de destination DBLINK dans Oracle Database à l'aide de DBLINK. Quand on m'a demandé "Y a-t-il une source (source d'information)?" Dans une certaine question dans un certain chat, c'est devenu "Gununu.", Alors je l'ai écrit. 彡 (゜) (゜)

1. Environnement et configuration

J'ai essayé de vérifier avec la configuration suivante.

Java → (JDBC) → User_A → (DBLINK) → User_B

L'environnement utilise l'environnement suivant de Virtualbox. Il est facile à configurer car il est inclus depuis le début. 彡 (゜) (゜)

Créez sans effort un environnement Oracle DB 19c avec une image OTN VirtualBox https://qiita.com/ora_gonsuke777/items/b41f37637e59319796b4

2. Création de User_A et insertion de données

Tout d'abord, créez User_A et insérez les données.

export ORACLE_HOME=/u01/app/oracle/product/version/db_1
export PATH=${PATH}:${ORACLE_HOME}/bin

sqlplus /nolog

CONNECT SYS/oracle@ORCL AS SYSDBA

CREATE USER USER_A IDENTIFIED BY USER_A
DEFAULT TABLESPACE USERS
TEMPORARY TABLESPACE TEMP;

GRANT CREATE SESSION TO USER_A;
GRANT CREATE TABLE TO USER_A;
ALTER USER USER_A QUOTA UNLIMITED ON USERS;

CONNECT USER_A/xxxxxxxx@orcl;

CREATE TABLE TBL_A(
  COL1 NUMBER
);
INSERT INTO TBL_A VALUES(100);
COMMIT;


Connected.

User created.

Grant succeeded.

Grant succeeded.

User altered.

Connected.

Table created.

1 row created.

Commit complete.

3. Créez User_B et insérez des données

Créez ensuite User_B et insérez les données. Que faire est avec User_A 彡 (゚) (゚)

export ORACLE_HOME=/u01/app/oracle/product/version/db_1
export PATH=${PATH}:${ORACLE_HOME}/bin

sqlplus /nolog

CONNECT SYS/oracle@ORCL AS SYSDBA

CREATE USER USER_B IDENTIFIED BY USER_B
DEFAULT TABLESPACE USERS
TEMPORARY TABLESPACE TEMP;

GRANT CREATE SESSION TO USER_B;
GRANT CREATE TABLE TO USER_B;
ALTER USER USER_B QUOTA UNLIMITED ON USERS;

CONNECT USER_B/xxxxxxxx@orcl;

CREATE TABLE TBL_B(
  COL1 NUMBER
);
INSERT INTO TBL_B VALUES(200);
COMMIT;


Connected.

User created.

Grant succeeded.

Grant succeeded.

User altered.

Connected.

Table created.

1 row created.

Commit complete.

4. Création de DBLINK et vérification du fonctionnement

Créez DBLINK dans User_A et vérifiez l'opération. Vous pouvez voir que le TBL_B créé pour User_B ne peut être référencé que via DBLINK.


export ORACLE_HOME=/u01/app/oracle/product/version/db_1
export PATH=${PATH}:${ORACLE_HOME}/bin

sqlplus /nolog

CONNECT SYS/oracle@ORCL AS SYSDBA

GRANT CREATE DATABASE LINK TO USER_A;

CONNECT USER_A/xxxxxxxx@orcl;

CREATE DATABASE LINK DBL_USER_B
CONNECT TO USER_B IDENTIFIED BY xxxxxxxx
USING 'ORCL';

SELECT * FROM TBL_A;

SELECT * FROM TBL_B;

SELECT * FROM USER_B.TBL_B;

SELECT * FROM TBL_B@DBL_USER_B;

Connected.

Grant succeeded.

Connected.

Database link created.

      COL1
----------
       100

              *
ERROR at line 1:
ORA-00942: table or view does not exist

                     *
ERROR at line 1:
ORA-00942: table or view does not exist

      COL1
----------
       200

5. Exemple de code Java

Il s'agit d'un exemple qui se connecte à User_A et SELECT et affiche respectivement TBL_A et TBL_B (via DBLINK).

import java.sql.*;

public class GetDblinkData {
    public static void main(String[] args) {
        final String path = "jdbc:oracle:thin:@localhost:1521/orcl";
        final String id = "USER_A";  //ID
        final String pw = "xxxxxxxx";  //password

        try (
            Connection conn  = DriverManager.getConnection(path, id, pw);
            Statement  stmt  = conn.createStatement();
            ResultSet  rs    = stmt.executeQuery("SELECT COL1 FROM TBL_A");
            Statement  stmt2 = conn.createStatement();
            ResultSet  rs2   = stmt2.executeQuery("SELECT COL1 FROM TBL_B@DBL_USER_B");
        ) {
            while (rs.next()) {
                int i = rs.getInt("COL1");
                System.out.println("TBL_A COL1 => " + i);
            }
            while (rs2.next()) {
                int j = rs2.getInt("COL1");
                System.out.println("TBL_B COL1 => " + j);
            }
        } catch(SQLException ex) {
            ex.printStackTrace();  //Error
        }
    }
}

5. Compilez et exécutez

Enfin, compilez et exécutez. Lorsque vous exécutez la commande suivante ... 彡 (゚) (゚)

javac GetDblinkData.java

java -classpath /u01/app/oracle/product/version/db_1/jdbc/lib/ojdbc8.jar:. GetDblinkData

TBL_A COL1 => 100
TBL_B COL1 => 200

Les données d'origine DBLINK (TBL_A) et les données de destination DBLINK (TBL_B) peuvent être acquises et affichées! 彡 (^) (^)

6. Résumé

J'ai pu confirmer que les données de la source DBLINK et de la destination DBLINK peuvent être acquises avec une seule connexion DB. Cependant, DBLINK est une épée à double tranchant. C'est un mécanisme étroitement couplé, alors n'en abusez pas. 彡 (゜) (゜)

Recommended Posts

Exemple de code Java pour acquérir et afficher les données source et de destination DBLINK dans Oracle Database à l'aide de DBLINK
Exemple de source Java pour SELECT et afficher CLOB (Oracle Database + java)
Exemple de code pour obtenir les valeurs des principaux types SQL dans Java + Oracle Database 12c
Exemple de code pour la sérialisation et la désérialisation des énumérations Java Enum et JSON dans Jackson
Exemple de code pour convertir List en List <String> dans Java Stream
[Pour les débutants] Exemple minimum pour afficher RecyclerView en Java
Comment convertir A en A et A en A en utilisant le produit logique et la somme en Java
Exemple de code pour analyser la date et l'heure avec SimpleDateFormat de Java
Source pour afficher le tableau de caractères avec numberPicker dans Android Studio (Java)
[Android] Convertissez Map en JSON à l'aide de GSON avec Kotlin et Java
Exemple de code pour appeler l'API Yahoo! Local Search en Java
Afficher les données Firestore dans RecyclerView [Java]
Nouvelles fonctionnalités de Java 9 et exemple de code
Exemple de code utilisant Minio de Java
Essayez d'obtenir des données de la base de données en utilisant MyBatis dans le projet Micronaut + Kotlin
Utilisation de Hystrix et Sentinel dans un exemple de code
[Java] Flux du code source à l'exécution
Exemple pour décompresser le fichier gz en Java
De Java à C et de C à Java dans Android Studio
Exemple de code source pour trouver le multiple commun minimum de plusieurs valeurs en Java
Exemple de code pour obtenir les valeurs de type SQL clés dans Java + MySQL 8.0
Techniques de lecture du code source Java dans Eclipse
Comment afficher une page Web en Java
Code pour échapper aux chaînes JSON en Java
[Java] Convertit le code DB en valeur de code à l'aide d'énum
Essayez d'utiliser Sourcetrail (version win) avec du code Java
Essayez d'utiliser Sourcetrail (version macOS) avec du code Java
Afficher "Hello World" dans le navigateur à l'aide de Java
Afficher "Hello World" dans le navigateur à l'aide de Java
Appelez une procédure stockée dans l'interface CallableStatement de java pour voir les colonnes PROGRAM et MODULE dans V $ ACTIVE_SESSION_HISTORY. (Base de données Oracle + java)