Exemple de code pour obtenir les valeurs des principaux types SQL dans Java + Oracle Database 12c

Aperçu

--Afficher un exemple de code dans Oracle Database 12c qui définit les colonnes des principaux types de données SQL dans une table et récupère les valeurs de colonne d'un programme Java. --Cet environnement de vérification des opérations: Oracle Database 12c Release 2 (12.2.0.1.0) Enterprise Edition (sur Docker) + pilote Oracle JDBC Thin (ojdbc8.jar) 19.7.0.0 + Java 14 (AdoptOpenJDK 14.0.2) + Gradle 6.6 + macOS Catalina

Exemple de code

Liste des fichiers

├── build.gradle
└── src
    └── main
        └── java
            └── JdbcSample.java

build.gradle

plugins {
  id 'application'
  id 'java'
}

sourceCompatibility = JavaVersion.VERSION_14

repositories {
  mavenCentral()
}

dependencies {

  //Spécifiez runtimeOnly si vous souhaitez simplement utiliser le pilote Oracle JDBC lors de l'exécution
  //runtimeOnly 'com.oracle.database.jdbc:ojdbc8:19.7.0.0'

  //Cette fois oracle.jdbc.Spécifiez l'implémentation pour utiliser OracleTypes
  implementation 'com.oracle.database.jdbc:ojdbc8:19.7.0.0'
}

tasks.withType(JavaCompile) {
  //Utiliser la fonction de prévisualisation de Java 14
  options.compilerArgs += ['--enable-preview']
}

application {
  //Utiliser la fonction de prévisualisation de Java 14
  applicationDefaultJvmArgs = ['--enable-preview']
  mainClassName = 'JdbcSample'
}

JdbcSample.java

import oracle.jdbc.OracleTypes; //Non requis si vous l'utilisez normalement(Cette fois, utilisé pour obtenir des informations sur le type JDBC étendu Oracle)

import java.lang.reflect.Field;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.Statement;
import java.sql.Types;
import java.util.Arrays;

class JdbcSample {

  public static void main(String[] args) throws Exception {

    //Connectez-vous à MySQL
    String url = "jdbc:oracle:thin:@//localhost:1521/testdb";
    String user = "javarista";
    String password = "cafebabe";
    Connection con = DriverManager.getConnection(url, user, password);
    Statement stmt = con.createStatement();

    //Créer une table
    //Définir des colonnes avec différents types de données SQL
    // (Utilisez la fonction de bloc de texte qui peut être écrite comme un document d'entendre qui peut être utilisée avec la fonction d'aperçu Java 14)
    stmt.execute("""
      create table test (
        --Type de chaîne
        my_char      CHAR(8 CHAR),        --Chaîne de caractères de longueur fixe(Fondamentalement, longueur maximale de 2000 octets)
        my_varchar2  VARCHAR2(512 CHAR),  --Chaîne de caractères de longueur variable(Fondamentalement, longueur maximale de 4000 octets)
        my_clob      CLOB,                -- Character Large Object

        --Type binaire
        my_raw   RAW(256),  --Binaire de longueur variable(Fondamentalement, longueur maximale de 2000 octets)
        my_blob  BLOB,      -- Binary Large Object

        --Type booléen
        my_number_1  NUMBER(1),  --0 est interprété comme faux, toutes les autres valeurs sont interprétées comme vrai

        --Type entier
        my_number_38  NUMBER(38),  --Jusqu'à 38 chiffres
        my_smallint   SMALLINT,    --Type de données ANSI converti en type de données Oracle
        my_integer    INTEGER,     --Type de données ANSI converti en type de données Oracle

        --Type à virgule flottante
        my_binary_float      BINARY_FLOAT,      --Nombre à virgule flottante simple précision 4 octets
        my_binary_double     BINARY_DOUBLE,     --Nombre à virgule flottante double précision 8 octets
        my_float             FLOAT,             --Type de données Oracle FLOAT(126)Type de données ANSI converti en
        my_double_precision  DOUBLE PRECISION,  --Type de données Oracle FLOAT(126)Type de données ANSI converti en
        my_real              REAL,              --Type de données Oracle FLOAT(63)Type de données ANSI converti en

        --Type de point fixe
        my_fixed_point_number  NUMBER(7, 4),   --Nombre décimal fixe
        my_numeric             NUMERIC(7, 4),  --Type de données ANSI converti en type de données Oracle
        my_decimal             DECIMAL(7, 4),  --Type de données ANSI converti en type de données Oracle

        --Type d'heure
        my_date                      DATE,                        --Date+Heures, minutes et secondes
        my_timestamp                 TIMESTAMP(9),                --Date+Heures, minutes et secondes+Nano secondes
        my_timestamp_with_time_zone  TIMESTAMP(9) WITH TIME ZONE  --Date+Heures, minutes et secondes+Nano secondes+Fuseau horaire
      )""");

    //Ajouter un enregistrement
    // (Utilisez la fonction de bloc de texte qui peut être écrite comme un document d'entendre qui peut être utilisée avec la fonction d'aperçu Java 14)
    stmt.execute("""
      insert into test values (
        --Type de chaîne
        'Hello', -- CHAR
        'Hello', -- VARCHAR2
        'Hello', -- CLOB

        --Type binaire
        HEXTORAW('CAFEBABE'),  -- RAW
        HEXTORAW('CAFEBABE'),  -- BLOB,

        --Type booléen
        1,  --0 est interprété comme faux, toutes les autres valeurs sont interprétées comme vrai

        --Type entier
        12345678901234567890123456789012345678,  -- NUMBER(38)
        32767,                                   -- SMALLINT
        2147483647,                              -- INTEGER

        --Type à virgule flottante
        123.0001,  -- BINARY_FLOAT
        123.0001,  -- BINARY_DOUBLE
        123.0001,  -- FLOAT
        123.0001,  -- DOUBLE PRECISION
        123.0001,  -- REAL

        --Type de point fixe
        123.0001,  -- NUMBER(7, 4)
        123.0001,  -- NUMERIC(7, 4)
        123.0001,  -- DECIMAL(7, 4)

        --Type d'heure
        TO_DATE('2001-02-03 04:05:06', 'YYYY-MM-DD HH24:MI:SS'),                                      -- DATE
        TO_TIMESTAMP('2001-02-03 04:05:06.999999999', 'YYYY-MM-DD HH24:MI:SS.FF9'),                   -- TIMESTAMP(9)
        TO_TIMESTAMP_TZ('2001-02-03 04:05:06.999999999 +00:00', 'YYYY-MM-DD HH24:MI:SS.FF9 TZH:TZM')  -- TIMESTAMP(9) WITH TIME ZONE
      )""");

    //Obtenez un enregistrement
    ResultSet rs = stmt.executeQuery("select * from test");
    while (rs.next()) {

      //Obtenir le type d'un objet Java pour le type JDBC ou SQL d'une colonne
      System.out.println("Nom de colonne-Type JDBC-Type SQL spécifique à la base de données-Type d'objet Java");
      ResultSetMetaData rsmd = rs.getMetaData();
      for (int i = 1; i <= rsmd.getColumnCount(); i++) {
        System.out.println(
          rsmd.getColumnName(i) + " - " +
            getJdbcTypeName(rsmd.getColumnType(i)) + " - " +
            rsmd.getColumnTypeName(i) + " - " +
            rsmd.getColumnClassName(i));
      }
      System.out.println();

      //Obtenir les valeurs de colonne
      System.out.println("Nom de colonne-Valeur de la colonne");

      //Type de chaîne
      System.out.println("my_char=" + rs.getString("my_char"));
      System.out.println("my_varchar2=" + rs.getString("my_varchar2"));
      System.out.println("my_clob=" + rs.getClob("my_clob"));

      //Type binaire
      System.out.println("my_raw=" + Arrays.toString(rs.getBytes("my_raw")));
      System.out.println("my_blob=" + rs.getBlob("my_blob"));

      //Type booléen
      System.out.println("my_number_1=" + rs.getBoolean("my_number_1"));

      //Type entier
      System.out.println("my_number_38=" + rs.getBigDecimal("my_number_38"));
      System.out.println("my_smallint=" + rs.getInt("my_smallint"));
      System.out.println("my_integer=" + rs.getInt("my_integer"));

      //Type à virgule flottante
      System.out.println("my_binary_float=" + rs.getFloat("my_binary_float"));
      System.out.println("my_binary_double=" + rs.getDouble("my_binary_double"));
      System.out.println("my_float=" + rs.getDouble("my_float"));
      System.out.println("my_double_precision=" + rs.getDouble("my_double_precision"));
      System.out.println("my_real=" + rs.getDouble("my_real"));

      //Type de point fixe
      System.out.println("my_fixed_point_number=" + rs.getBigDecimal("my_fixed_point_number"));
      System.out.println("my_numeric=" + rs.getBigDecimal("my_numeric"));
      System.out.println("my_decimal=" + rs.getBigDecimal("my_decimal"));

      //Type d'heure
      System.out.println("my_date=" + rs.getTimestamp("my_date"));
      System.out.println("my_timestamp=" + rs.getTimestamp("my_timestamp").toInstant());
      System.out.println("my_timestamp_with_time_zone=" + rs.getTimestamp("my_timestamp_with_time_zone").toInstant());
    }

    stmt.close();
    con.close();
  }

  //Obtenez le nom du type JDBC
  private static String getJdbcTypeName(int type) throws IllegalAccessException {
    //Recherche par type JDBC standard Java
    Field[] fs = Types.class.getDeclaredFields();
    for (Field f : fs) {
      if (type == f.getInt(null)) {
        return f.getName();
      }
    }
    //Recherche par type JDBC d'extension Oracle
    fs = OracleTypes.class.getDeclaredFields();
    for (Field f : fs) {
      if (type == f.getInt(null)) {
        return "OracleTypes." + f.getName();
      }
    }
    //Puisqu'il n'y avait aucun type JDBC correspondant, la valeur du type est convertie en chaîne et renvoyée.
    return "" + type;
  }
}

Résultat d'exécution

Exécutez avec la tâche d'exécution de Gradle.

$ gradle run
Starting a Gradle Daemon (subsequent builds will be faster)

> Task :compileJava
Mise en garde:/Users/foo/bar/src/main/java/JdbcSample.java utilise la fonctionnalité de langue de prévisualisation.
Mise en garde:Le détail est,-Xlint:Veuillez recompiler avec l'option d'aperçu.

> Task :run
Nom de colonne-Type JDBC-Type SQL spécifique à la base de données-Type d'objet Java
MY_CHAR - CHAR - CHAR - java.lang.String
MY_VARCHAR2 - VARCHAR - VARCHAR2 - java.lang.String
MY_CLOB - CLOB - CLOB - oracle.jdbc.OracleClob
MY_RAW - VARBINARY - RAW - [B
MY_BLOB - BLOB - BLOB - oracle.jdbc.OracleBlob
MY_NUMBER_1 - NUMERIC - NUMBER - java.math.BigDecimal
MY_NUMBER_38 - NUMERIC - NUMBER - java.math.BigDecimal
MY_SMALLINT - NUMERIC - NUMBER - java.math.BigDecimal
MY_INTEGER - NUMERIC - NUMBER - java.math.BigDecimal
MY_BINARY_FLOAT - OracleTypes.BINARY_FLOAT - BINARY_FLOAT - java.lang.Float
MY_BINARY_DOUBLE - OracleTypes.BINARY_DOUBLE - BINARY_DOUBLE - java.lang.Double
MY_FLOAT - NUMERIC - NUMBER - java.lang.Double
MY_DOUBLE_PRECISION - NUMERIC - NUMBER - java.lang.Double
MY_REAL - NUMERIC - NUMBER - java.lang.Double
MY_FIXED_POINT_NUMBER - NUMERIC - NUMBER - java.math.BigDecimal
MY_NUMERIC - NUMERIC - NUMBER - java.math.BigDecimal
MY_DECIMAL - NUMERIC - NUMBER - java.math.BigDecimal
MY_DATE - TIMESTAMP - DATE - java.sql.Timestamp
MY_TIMESTAMP - TIMESTAMP - TIMESTAMP - oracle.sql.TIMESTAMP
MY_TIMESTAMP_WITH_TIME_ZONE - OracleTypes.TIMESTAMPTZ - TIMESTAMP WITH TIME ZONE - oracle.sql.TIMESTAMPTZ

Nom de colonne-Valeur de la colonne
my_char=Hello   
my_varchar2=Hello
my_clob=oracle.sql.CLOB@7c711375
my_raw=[-54, -2, -70, -66]
my_blob=oracle.sql.BLOB@3a44431a
my_number_1=true
my_number_38=12345678901234567890123456789012345678
my_smallint=32767
my_integer=2147483647
my_binary_float=123.0001
my_binary_double=123.0001
my_float=123.0001
my_double_precision=123.0001
my_real=123.0001
my_fixed_point_number=123.0001
my_numeric=123.0001
my_decimal=123.0001
my_date=2001-02-03 04:05:06.0
my_timestamp=2001-02-02T19:05:06.999999999Z
my_timestamp_with_time_zone=2001-02-03T04:05:06.999999999Z

BUILD SUCCESSFUL in 16s
2 actionable tasks: 2 executed

Type booléen de la base de données Oracle

Oracle Database JDBC Developer's Guide, 12c Release 2 \ (12 \ .2 ) \ -Accessing and Manipulating Oracle Data](https://docs.oracle.com/cd/E82638_01/jjdbc/accessing-and- manipuler-Oracle-data.html # GUID-EE0C380B-AB3E-4D1C-B02F-E3E599C72F91)

Comme le type de base de données BOOLEAN n'existe pas, une conversion de type de données est toujours effectuée lors de l'utilisation de getBoolean. La méthode getBoolean n'est prise en charge que pour les colonnes de nombres. Lorsque getBoolean est appliqué à ces colonnes, les valeurs 0 (zéro) sont interprétées comme false et toutes les autres valeurs sont interprétées comme true. Lorsqu'il est appliqué à un autre type de colonne, getBoolean renvoie l'exception java.lang.NumberFormatException.

Matériel de référence

Recommended Posts

Exemple de code pour obtenir les valeurs des principaux types SQL dans Java + Oracle Database 12c
Exemple de code pour obtenir les valeurs de type SQL clés dans Java + MySQL 8.0
Exemple de code pour obtenir les valeurs de type JDBC clés dans la base de données Java + H2
Exemple de code source pour trouver le multiple commun minimum de plusieurs valeurs en Java
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 code pour appeler l'API Yahoo! Local Search en Java
Comment obtenir la longueur d'un fichier audio avec Java
Comment obtenir la date avec Java
Comment obtenir le chemin absolu d'un répertoire s'exécutant en Java
AndroidStudio Faisons référence au C ++ dans le module des autres projets (Java / kotlin)
Branchement conditionnel du résultat de l'instruction SQL pour n'en rechercher qu'une seule en Java
[Java] Comment obtenir l'URL de la source de transition
Obtenez l'URL de la destination de la redirection HTTP en Java
Exemple de code pour convertir List en List <String> dans Java Stream
[Java] Comment obtenir la valeur maximale de HashMap
Source utilisée pour obtenir l'URL de la source de redirection en Java
[Java] Récupère le fichier dans le fichier jar quel que soit l'environnement
Comment obtenir le nom de classe de l'argument de LoggerFactory.getLogger lors de l'utilisation de SLF4J en Java
Exemple de code pour attribuer une valeur dans le fichier de propriétés à un champ du type attendu
Comment obtenir le nom d'une classe / méthode exécutée en Java
Une explication rapide des cinq types de statique Java
Accédez à l'abréviation à partir de 5 exemples de listes Java en italique
Reportez-vous à C ++ dans le module Android Studio (Java / kotlin)
Exemple de source Java pour SELECT et afficher CLOB (Oracle Database + java)
Éléments à prendre en compte lors de l'écriture de code en Java
Comment dériver le dernier jour du mois en Java
[Java] Obtenez les dates des derniers lundi et dimanche dans l'ordre
Comment obtenir l'identifiant de la clé PRIMAY incrémentée automatiquement dans MyBatis
La milliseconde définie dans /lib/calendars.properties de Java jre est UTC
Obtenez l'URL publique du fichier privé de Flickr en Java
Exemple de code utilisant JMustache, le moteur de modèles Moustache en Java
Comment incrémenter la valeur de Map sur une ligne en Java
SQL pour obtenir la liste des schémas (Oracle / MySQL / PostgreSQL / SQLServer / Cassandra)
Devinez le code de caractère en Java
Liste des types ajoutés dans Java 9
J'ai essayé de créer un exemple de programme en utilisant le problème du spécialiste des bases de données dans la conception pilotée par domaine
Ce que j'ai fait pour obtenir le programmeur Java certifié Oracle, Silver SE 8
[Java] Comment accéder au début d'une chaîne spécifique à l'aide de la classe String
Comment trouver le nombre total de pages lors de la pagination en Java
Exemple de programme qui renvoie la valeur de hachage d'un fichier en Java
Je souhaite obtenir l'adresse IP lors de la connexion au Wi-Fi avec Java
Comment obtenir la valeur du paramètre (valeur de la propriété) à partir de la base de données dans Spring Framework
À partir de Java9, les constructeurs de classe correspondant aux types primitifs sont marqués comme obsolètes.
Je veux obtenir le nom de champ du champ [Java]. (Vieux ton d'histoire)
Comment créer votre propre annotation en Java et obtenir la valeur
Retrouvez la date de fin de mois dans différentes langues (C #, Java, Ruby, Javascript, VBA, Excel, MySQL, SQLite3, Oracle)
Référence Java à comprendre dans la figure
[Java] Obtenez le jour d'un jour spécifique
[Java] Comment obtenir le répertoire actuel
Sortie du livre "Introduction à Java"
[Java] [Microsoft] Éléments à prendre en compte lors de l'inclusion du pilote JDBC SQL Server dans un fichier jar
L'histoire de l'écriture de Java dans Emacs
Exemple pour décompresser le fichier gz en Java
De Java à C et de C à Java dans Android Studio
[Swift] Comment obtenir le nombre d'éléments dans un tableau (super basique)
Création d'un exemple de programme en utilisant le problème d'un spécialiste des bases de données dans DDD Improvement 2
graphql-ruby: Comment obtenir le nom de la requête ou de la mutation dans le contrôleur Remarque
Comment obtenir l'ID d'un utilisateur qui s'est authentifié avec Firebase dans Swift
Résumer le cycle de vie des objets Java à prendre en compte dans le développement Android