Liste complète des types de données JDBC

En plus des types de données que vous connaissez, JDBC vous permet de travailler avec de nombreux types de données natifs pour le SGBD. Ci-dessous, je vais énumérer les types et les fonctions pour les obtenir:

Taper Méthode
déployer obtenirTableau()
AsciiStream getAsciiStream()
BigDecimal getBigDecimal()
Flux binaire getBinaryStream()
goutte getBlob()
booléen getBooléen()
goutte getBlob()
booléen getBooléen()
octets getByte()
octets getBytes()
CharacterStream getCharacterStream()
Clob getClob()
Date avoir un rendez-vous()
Double getDouble()
flotter getFloat()
entier getInt()
Long getLong()
NCharacterStream getNCharacterStream()
Objet obtenirObjet()
Réf obtenirRef()
ID de ligne getRowId()
court getShort()
SQLXML getSQLXML()
Chaîne getString()
Temps obtenir du temps()
Horodatage getTimestamp()
UnicodeStream getUnicodeStream()
URL obtenirURL()

Nous avons déjà considéré les types primitifs. Essayons maintenant de travailler avec des objets.

Type de données BLOB

Si vous souhaitez enregistrer un objet dans la base de données, le moyen le plus simple consiste à utiliser le type SQL BLOB. JDBC a son homologue appelé Blob.

BLOB signifie Binary Large Object . _ _ Il est utilisé pour stocker un tableau d'octets. Le type Blob dans JDBC est une interface et vous pouvez y placer (et recevoir) des données de deux manières :

  • Utilisation du flux d'entrée
  • Utilisation d'un tableau d'octets

Exemple : la colonne numéro 3 contient le type BLOB :

Statement statement = connection.createStatement();
    ResultSet results = statement.executeQuery("SELECT * FROM user");
    results.first();

    Blob blob = results.getBlob(3);
    InputStream is = blob.getBinaryStream();

Pour créer votre propre objet Blob, vous devez utiliser la fonction createBlob() . Exemple:

String insertQuery = “INSERT INTO images(name, image) VALUES (?, ?);
PreparedStatement statement = connection.prepareStatement(insertQuery);

// Create a Blob object and get an OtputStream from it to write data to it
Blob blob = connection.createBlob();

// Populate the Blob with data...
OutputStream os = blob.setBinaryStream(1);

// Passing Blob as query parameter
statement.setBlob(2, blob);
statement.execute();

Il existe deux manières de remplir un Blob avec des données. Le premier est via OutputSteam :

Path avatar = Paths.get("E:\\images\\cat.jpg");
OutputStream os = blob.setBinaryStream(1);
Files.copy(avatar, os);

Et le second - en remplissant d'octets :

Path avatar = Paths.get("E:\\images\\cat.jpg");
byte[] content = Files.readAllBytes(avatar);
blob.setBytes(1, content);

Enregistrement d'un objet Java dans une base de données

Nous avons appris à enregistrer des objets binaires dans la base de données : tableaux d'octets, flux d'octets, etc. Qu'en est-il des objets Java ? Comment sauvegarder un objet Java dans une base de données ?

Disons que nous avons une classe Employee Java qui décrit un employé d'une entreprise :

public class Employee {
    public Integer id;
    public String name;
    public String occupation;
    public Integer salary;
    public Date joinDate;
}

Comment pouvons-nous enregistrer un objet de cette classe dans la base de données à l'aide de JDBC ?

En fait, vous savez déjà tout ce que vous devez savoir. Vous devez d'abord créer une table dans la base de données qui correspond à cette classe. Par exemple, celui-ci :

CREATE TABLE employee {
    id INT PRIMARY KEY NOT NULL,
    name VARCHAR(100),
    occupation VARCHAR(100),
    salary INT,
    join_date DATE
}

Et maintenant écrivons le code qui ajoutera un objet de notre classe Employee à la base :

public static boolean addEmployee(Connection connection, Employee employee) throws Exception {
    	// Create and prepare a query to insert data into the table
    	String insertQuery = "INSERT INTO employee(name, occupation, salary, join_date ) VALUES (?, ?, ?, ?)";
    	PreparedStatement statement = connection.prepareStatement(insertQuery);

    	// Populate the query with data from the Employee object
    	statement.setString(1, employee.name);
    	statement.setString(2, employee.occupation);
    	statement.setInt(3, employee.salary);
    	statement.setDate(4, employee.joinDate);

    	// Execute our query and it returns true if a new row has been added
    	int count = statement.executeUpdate();
    	return count > 0;
    }

Simple et clair. La méthode fonctionnera très bien.

Lire un objet Java à partir d'une base de données

Nous avons appris à écrire un objet dans la base de données, écrivons maintenant le code pour lire l'objet à partir de la base de données. Commençons par le code qui lit un objet de la base de données par son ID :

public static Employee getEployeeById(Connection connection, int id) throws Exception {
    	// Create and prepare a query to get an employee from the table
    	PreparedStatement statement = connection.prepareStatement("SELECT * FROM employee WHERE id = ?");
    	statement.setInt(1, id);

    	// Execute our query and it returns null if there are no rows in the query result
    	ResultSet results = statement.executeQuery();
    	if (!results.first())
        	return null;

    	// Populate the Employee object with the data from the ResultSet
    	Employee employee = new Employee();
    	employee.id = results.getInt(1);
    	employee.name = results.getString(2);
    	employee.occupation = results.getString(3);
    	employee.salary = results.getInt(4);
    	employee.joinDate = results.getDate(5);
    	return employee;
}

Et si nous n'avions pas besoin d'un objet, mais de plusieurs ? Une telle demande est également facile à écrire. Faisons appel à tous les employés de notre entreprise :

public static List<Employee> getAllEployees(Connection connection) throws Exception {
	// Create and execute a query to get employees from the table
	Statement statement = connection.createStatement();
	ResultSet results = statement.executeQuery("SELECT * FROM employee");

	ArrayList<Employee> list = new ArrayList<Employee>();
	while (results.next()) {
        // Populate the Employee object with the data from the current row of the ResultSet
	        Employee employee = new Employee();
	        employee.id = results.getInt(1);
	        employee.name = results.getString(2);
	        employee.occupation = results.getString(3);
	        employee.salary = results.getInt(4);
	        employee.joinDate = results.getDate(5);

	        list.add(employee);
	}
	return list;
}

Soit dit en passant, s'il existe de nombreuses méthodes de ce type, vous devrez écrire le même code dans chacune d'elles pour convertir la chaîne ResultSet en objetemployé. Ce code peut donc être déplacé vers une méthode distincte.

Cela peut être particulièrement utile si la classe Employee contient des champs complexes tels que Enum, InputStream ou des références à d'autres objets que nous souhaitons également stocker dans la base de données.