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