Exemple de code pour obtenir les valeurs de type JDBC clés dans la base de données Java + H2

Aperçu

Qu'est-ce qu'un type JDBC?

Le type JDBC est un type qui sert d'intermédiaire entre le type SQL et le type de langage Java. Proche du type qui représente les données SQL (comme CHAR ou INTEGER).

Type SQL ← (mappage) → type JDBC ← (mappage) → type de langage Java

Introduction à l'API JDBC \ -Mappage entre les types SQL et Java

Il existe des différences considérables entre les types SQL pris en charge par différents produits de base de données. Même si différentes bases de données prennent en charge des types SQL qui ont la même signification, elles peuvent recevoir des noms différents. Par exemple, la plupart des principales bases de données prennent en charge les types SQL pour les grandes valeurs binaires, qu'Oracle appelle LONG RAW, Sybase IMAGE, Informix BYTE et DB2 LONG VARCHAR FOR BIT DATA. ..

Les programmeurs JDBC n'ont généralement pas à se soucier du nom de type SQL utilisé par la base de données cible. Dans de nombreux cas, les programmeurs JDBC n'ont pas besoin de programmer sur des tables de base de données existantes et de prêter attention au nom de type SQL exact qui a créé ces tables.

JDBC définit un ensemble d'identificateurs de type SQL génériques dans la classe java.sql.Types. Les types de l'ensemble sont conçus pour représenter les types SQL les plus couramment utilisés. La programmation avec l'API JDBC permet aux programmeurs d'utiliser l'ensemble des types JDBC pour référencer des types SQL génériques sans connaître le nom de type SQL exact utilisé par la base de données cible. ..

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 {
  // H2 Database 1.4.Introduit 200
  implementation 'com.h2database:h2:1.4.200'
}

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 java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.Statement;
import java.util.Arrays;

class JdbcSample {

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

    //Connectez-vous à la base de données H2
    // mem:Base de données en mémoire
    // DB_CLOSE_DELAY=-1:Ne supprimez pas le contenu de la base de données lors de la déconnexion
    String url = "jdbc:h2:mem:testdb;DB_CLOSE_DELAY=-1";
    String user = "sa";
    String password = "";
    Connection con = DriverManager.getConnection(url, user, password);
    Statement stmt = con.createStatement();

    //Créer une table
    //Différents types JDBC(Subtilement différent du type de données SQL)Définir la colonne avec
    // (Utilisez la fonction de bloc de texte qui peut être écrite comme un document here qui peut être utilisée avec la fonction de prévisualisation Java 14)
    stmt.execute("""
      create table test (
        --Type de chaîne
        my_char         CHAR,         --Chaîne courte de longueur fixe
        my_varchar      VARCHAR,      --Chaîne courte de longueur variable
        my_longvarchar  LONGVARCHAR,  --Longue chaîne de longueur variable
        my_clob         CLOB,         -- Character Large Object

        --Type binaire
        my_binary         BINARY(4),         --Petit binaire de longueur fixe(Type de données SQL BIT)
        my_varbinary      VARBINARY(4),      --Petit binaire de longueur variable(Type de données SQL BIT VARYING)
        my_longvarbinary  LONGVARBINARY(4),  --Grand binaire de longueur variable
        my_blob           BLOB(4),           -- Binary Large Object

        --Type booléen
        my_boolean  BOOLEAN,  --Valeur booléenne

        --Type entier
        my_smallint  SMALLINT,  -- short
        my_integer   INTEGER,   -- int
        my_bigint    BIGINT,    -- long

        --Type à virgule flottante
        my_real    REAL,    --Flottant numérique à virgule flottante simple précision
        my_double  DOUBLE,  --Nombre à virgule flottante double précision double

        --Type de point fixe
        my_numeric  NUMERIC,  --Nombre décimal fixe
        my_decimal  DECIMAL,  --Type de point fixe

        --Type d'heure
        my_date       DATE,       --Date
        my_time       TIME,       --Heures, minutes et secondes
        my_timestamp  TIMESTAMP   --Date+Heures, minutes et secondes+Nano secondes
      )""");

    //Ajouter un enregistrement
    // (Utilisez la fonction de bloc de texte qui peut être écrite comme un document here qui peut être utilisée avec la fonction de prévisualisation Java 14)
    stmt.execute("""
      insert into test values (
        --Type de chaîne
        'Hello', -- CHAR
        'Hello', -- VARCHAR
        'Hello', -- LONGVARCHAR
        'Hello', -- CLOB

        --Type binaire
        X'CAFEBABE',  -- BINARY,
        X'CAFEBABE',  -- VARBINARY,
        X'CAFEBABE',  -- LONGVARBINARY,
        X'CAFEBABE',  -- BLOB,

        --Type booléen
        TRUE,  -- BOOLEAN

        --Type entier
        32767              ,  -- SMALLINT
        2147483647         ,  -- INTEGER
        9223372036854775807,  -- BIGINT

        --Type à virgule flottante
        123.0001,  -- REAL
        123.0001,  -- DOUBLE

        --Type de point fixe
        123.0001,  -- NUMERIC
        123.0001,  -- DECIMAL

        --Type d'heure
        '2001-02-03',                     -- DATE
        '04:05:06',                       -- TIME
        '2001-02-03 04:05:06.123456789'   -- TIMESTAMP
      )""");

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

      //Obtenez le type d'objet Java pour le type JDBC de la colonne
      System.out.println("Nom de colonne-Type JDBC-Type d'objet Java");
      ResultSetMetaData rsmd = rs.getMetaData();
      for (int i = 1; i <= rsmd.getColumnCount(); i++) {
        System.out.println(
          rsmd.getColumnName(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_varchar=" + rs.getString("my_varchar"));
      System.out.println("my_longvarchar=" + rs.getString("my_longvarchar"));
      System.out.println("my_clob=" + rs.getClob("my_clob"));

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

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

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

      //Type à virgule flottante
      System.out.println("my_real=" + rs.getFloat("my_real"));
      System.out.println("my_double=" + rs.getDouble("my_double"));

      //Type de point fixe
      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.getDate("my_date"));
      System.out.println("my_time=" + rs.getTime("my_time"));
      System.out.println("my_timestamp=" + rs.getTimestamp("my_timestamp"));
    }

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

Résultat d'exécution

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

$ gradle run

> 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 d'objet Java
MY_CHAR - CHAR - java.lang.String
MY_VARCHAR - VARCHAR - java.lang.String
MY_LONGVARCHAR - VARCHAR - java.lang.String
MY_CLOB - CLOB - java.sql.Clob
MY_BINARY - VARBINARY - [B
MY_VARBINARY - VARBINARY - [B
MY_LONGVARBINARY - VARBINARY - [B
MY_BLOB - BLOB - java.sql.Blob
MY_BOOLEAN - BOOLEAN - java.lang.Boolean
MY_SMALLINT - SMALLINT - java.lang.Short
MY_INTEGER - INTEGER - java.lang.Integer
MY_BIGINT - BIGINT - java.lang.Long
MY_REAL - REAL - java.lang.Float
MY_DOUBLE - DOUBLE - java.lang.Double
MY_NUMERIC - DECIMAL - java.math.BigDecimal
MY_DECIMAL - DECIMAL - java.math.BigDecimal
MY_DATE - DATE - java.sql.Date
MY_TIME - TIME - java.sql.Time
MY_TIMESTAMP - TIMESTAMP - java.sql.Timestamp

Nom de colonne-Valeur de la colonne
my_char=Hello
my_varchar=Hello
my_longvarchar=Hello
my_clob=clob0: 'Hello'
my_binary=[-54, -2, -70, -66]
my_varbinary=[-54, -2, -70, -66]
my_longvarbinary=[-54, -2, -70, -66]
my_blob=blob0: X'cafebabe'
my_boolean=true
my_smallint=32767
my_integer=2147483647
my_bigint=9223372036854775807
my_real=123.0001
my_double=123.0001
my_numeric=123.0001
my_decimal=123.0001
my_date=2001-02-03
my_time=04:05:06
my_timestamp=2001-02-03 04:05:06.123457

BUILD SUCCESSFUL in 1s
2 actionable tasks: 2 executed

Matériel de référence

Recommended Posts

Exemple de code pour obtenir les valeurs de type JDBC clés dans la base de données Java + H2
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 convertir List en List <String> dans Java Stream
Exemple de code Java pour acquérir et afficher les données source et de destination DBLINK dans Oracle Database à l'aide de DBLINK
Obtenir des valeurs de carte nulles en Java
Exemple de code pour appeler l'API Yahoo! Local Search en Java
Comment obtenir la date avec Java
Exemple pour décompresser le fichier gz en Java
Exemple de code pour la sérialisation et la désérialisation des énumérations Java Enum et JSON dans Jackson
Essayez de vous connecter à la base de données autonome avec JDK6 (Java) + pilote JDBC OCI (type 2).
Exemple de code Java 02
Code pour échapper aux chaînes JSON en Java
Exemple de code Java 03
Exemple de code source pour trouver le multiple commun minimum de plusieurs valeurs en Java
Comment obtenir une classe depuis Element en Java
Exemple de code Java 04
Bibliothèque "OSHI" pour acquérir des informations système avec Java
Exemple de code Java 01
[Java] Comment obtenir la clé et la valeur stockées dans Map par traitement itératif
Exemple de code pour attribuer une valeur dans le fichier de propriétés à un champ du type attendu
Source utilisée pour obtenir l'URL de la source de redirection en Java
[Pour les débutants] Exemple minimum pour afficher RecyclerView en Java
Trier les valeurs de la carte par ordre croissant des clés dans Java TreeMap
[Java] Points à noter sur l'inférence de type étendue dans Java 10
Détermination de type en Java
Comment obtenir le nom d'une classe / méthode exécutée en Java
Lire des valeurs de code autres que des caractères XML valides en Java
[JDBC] J'ai essayé d'accéder à la base de données SQLite3 depuis Java.
Exemple de source Java pour SELECT et afficher CLOB (Oracle Database + java)
Comment obtenir des valeurs en temps réel avec TextWatcher (Android)
Exemple de code pour analyser la date et l'heure avec SimpleDateFormat de Java
Éléments à prendre en compte lors de l'écriture de code en Java
J'ai essayé de convertir une chaîne de caractères en un type LocalDate en Java
Obtenir des attributs et des valeurs à partir d'un fichier XML en Java
Exemple de code de signature électronique (JAVA)
Obtenir des informations EXIF en Java
Collection d'exemples de code parallèle Java
Essayez le type fonctionnel en Java! ①
[Java] Obtenir KClass en Java [Kotlin]
Java avec Visual Studio Code
Écrire du code de type Java8 en Java8
J'ai essayé d'écrire du code comme une déclaration de type en Ruby
Comment gérer le code Java généré automatiquement par l'exemple jOOQ et Flyway
[Pour les débutants] Exemple minimum pour mettre à jour RecyclerView avec DiffUtils en Java
Comment obtenir l'identifiant de la clé PRIMAY incrémentée automatiquement dans MyBatis
[Avec un exemple de code] Les bases de Spring JDBC apprises avec l'application Blog
[Java] Je veux effectuer distinctement avec la clé dans l'objet
Exemple de code utilisant JMustache, le moteur de modèles Moustache en Java
[Java] Comment convertir du type String en type Path et obtenir le chemin
Comment obtenir la longueur d'un fichier audio avec Java