Maison >base de données >tutoriel mysql >Quel est le type de données JDBC Blob ? Comment y stocker et lire les données ?

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

PHPz
PHPzavant
2023-09-14 18:57:10984parcourir

什么是 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");

É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(?, ?)");

É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);

É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");
}
Blob récupère le contenu de l'objet Blob actuel et le renvoie sous forme de tableau d'octets. p>

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);

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++;
      }
   }
}

sortie

Connection established......
Table Created
Contents of the table are:
sample image
E:\images\blob_output1.jpg

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!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer