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. ..
├── 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();
  }
}
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