Maison > base de données > tutoriel mysql > le corps du texte

Quel est le type de données JDBC Blob ? Comment y stocker et lire les données ?

PHPz
Libérer: 2023-09-14 18:57:10
avant
957 Les gens l'ont consulté

什么是 JDBC Blob 数据类型?如何存储和读取其中的数据?

BLOB est un gros objet binaire qui peut contenir une quantité variable de données d'une longueur maximale de 65 535 caractères.

Ils sont utilisés pour stocker de grandes quantités de données binaires telles que des images ou d'autres types de données. document. Les champs définis comme TEXTE contiennent également de grandes quantités de données. La différence entre les deux réside dans le fait que le tri et les comparaisons des données stockées sont sensibles à la casse dans les BLOB mais pas dans les champs TEXTE. Vous n'avez pas spécifié la longueur en utilisant BLOB ou TEXT.

Stocker le Blob dans la base de données

Pour stocker le type de données Blob dans la base de données, suivez les étapes ci-dessous à l'aide du programme JDBC

Étape 1 : Connectez-vous à la base de données

Vous pouvez utiliser la méthode DriverManagergetConnection() Connectez-vous à la base de données

en passant l'URL MySQL (jdbc:mysql://localhost/sampleDB) (où exampleDB est le nom de la base de données), le nom d'utilisateur et le mot de passe comme paramètres à la méthode getConnection().

String mysqlUrl = "jdbc:mysql://localhost/sampleDB";
Connection con = DriverManager.getConnection(mysqlUrl, "root", "password");
Copier après la connexion

Étape 2 : Créez une instruction préparée

Utilisez la méthode prepareStatement() de l'interface Connection pour créer un objet PreparedStatement. Transmettez la requête d'insertion (avec des espaces réservés) en tant que paramètre à cette méthode.

PreparedStatement pstmt = con.prepareStatement("INSERT INTO MyTableVALUES(?, ?)");
Copier après la connexion

Étape 3 : Définir la valeur de l'espace réservé

Utilisez la méthode setter de l'interface PreparedStatement pour définir la valeur de l'espace réservé. Sélectionnez la méthode en fonction du type de données de la colonne. Par exemple, si la colonne est de type VARCHAR, utilisez la méthode setString() ; si la colonne est de type INT, vous pouvez utiliser la méthode setInt().

Si la colonne est de type Blob, vous pouvez définir sa valeur à l'aide de la méthode setBinaryStream() ou setBlob(). Ces méthodes reçoivent une variable entière représentant l'index du paramètre et un objet de la classe InputStream comme paramètres.

pstmt.setString(1, "sample image");
//Inserting Blob type
InputStream in = new FileInputStream("E:\images\cat.jpg");
pstmt.setBlob(2, in);
Copier après la connexion

Étape 4 : Exécuter l'instruction

Utilisez la méthode execute() de l'interface PreparedStatement pour exécuter l'objet PreparedStatement créé ci-dessus.

Récupérer les blobs de la base de données

La méthode getBlob() de l'interface ResultSet accepte un entier représentant l'index de la colonne (ou une valeur de chaîne représentant le nom de la colonne), et récupère la valeur de la colonne spécifiée et la renvoie dans la forme d'un objet Blob . La méthode

getBytes()

de l'interface

while(rs.next()) {
   rs.getString("Name");
   rs.getString("Type");
   Blob blob = rs.getBlob("Logo");
}
Copier après la connexion
Blob récupère le contenu de l'objet Blob actuel et le renvoie sous forme de tableau d'octets.

En utilisant la méthode getBlob(), vous pouvez obtenir le contenu du blob dans un tableau d'octets et utiliser la méthode write() pour créer un objet image FileOutputStream.

byte byteArray[] = blob.getBytes(1,(int)blob.length());
FileOutputStream outPutStream = new FileOutputStream("path");
outPutStream.write(byteArray);
Copier après la connexion

Exemple

L'exemple suivant crée une table de type de données blob dans une base de données MySQL et y insère une image. Récupérez-le et stockez-le dans le système de fichiers local.

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.sql.Blob;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.Statement;
public class BlobExample {
   public static void main(String args[]) throws Exception {
      //Registering the Driver
      DriverManager.registerDriver(new com.mysql.jdbc.Driver());
      //Getting the connection
      String mysqlUrl = "jdbc:mysql://localhost/sampleDB";
      Connection con = DriverManager.getConnection(mysqlUrl, "root", "password");
      System.out.println("Connection established......");
      //Creating a table
      Statement stmt = con.createStatement();
      stmt.execute("CREATE TABLE SampleTable( Name VARCHAR(255), Image BLOB)");
      System.out.println("Table Created");
      //Inserting values
      String query = "INSERT INTO SampleTable(Name,image) VALUES (?, ?)";
      PreparedStatement pstmt = con.prepareStatement(query);
      pstmt.setString(1, "sample image");
      FileInputStream fin = new FileInputStream("E:\images\cat.jpg");
      pstmt.setBlob(2, fin);
      pstmt.execute();
      //Retrieving the data
      ResultSet rs = stmt.executeQuery("select * from SampleTable");
      int i = 1;
      System.out.println("Contents of the table are: ");
      while(rs.next()) {
         System.out.println(rs.getString("Name"));
         Blob blob = rs.getBlob("Image");
         byte byteArray[] = blob.getBytes(1,(int)blob.length());
         FileOutputStream outPutStream = new
         FileOutputStream("E:\images\blob_output"+i+".jpg");
         outPutStream.write(byteArray);
         System.out.println("E:\images\blob_output"+i+".jpg");
         System.out.println();
         i++;
      }
   }
}
Copier après la connexion

sortie

Connection established......
Table Created
Contents of the table are:
sample image
E:\images\blob_output1.jpg
Copier après la connexion

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:tutorialspoint.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!