Heim  >  Artikel  >  Datenbank  >  Was ist der JDBC-Blob-Datentyp? Wie speichert und liest man die darin enthaltenen Daten?

Was ist der JDBC-Blob-Datentyp? Wie speichert und liest man die darin enthaltenen Daten?

PHPz
PHPznach vorne
2023-09-14 18:57:10950Durchsuche

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

BLOB ist ein binäres großes Objekt, das eine variable Datenmenge mit einer maximalen Länge von 65535 Zeichen speichern kann.

Sie werden zum Speichern großer Mengen binärer Daten wie Bilder oder anderer Datentypen verwendet. dokumentieren. Als TEXT definierte Felder enthalten ebenfalls große Datenmengen. Der Unterschied zwischen beiden besteht darin, dass beim Sortieren und Vergleichen gespeicherter Daten in BLOBs die Groß-/Kleinschreibung beachtet wird, in TEXT-Feldern jedoch nicht. Sie haben die Länge nicht mit BLOB oder TEXT angegeben.

Blob in Datenbank speichern

Um den Blob-Datentyp in der Datenbank zu speichern, befolgen Sie die folgenden Schritte mit dem JDBC-Programm

Schritt 1: Mit der Datenbank verbinden

Sie können die Methode DriverManagergetConnection() verwenden, um eine Verbindung zur Datenbank herzustellen

indem Sie die MySQL-URL (jdbc:mysql://localhost/sampleDB) (wobei exampleDB der Datenbankname ist), den Benutzernamen und das Passwort als Parameter an die Methode getConnection() übergeben.

String mysqlUrl = "jdbc:mysql://localhost/sampleDB";
Connection con = DriverManager.getConnection(mysqlUrl, "root", "password");

Schritt 2: Erstellen Sie eine vorbereitete Anweisung

Verwenden Sie die Methode prepareStatement() der Schnittstelle Connection, um ein PreparedStatement-Objekt zu erstellen. Übergeben Sie die Einfügungsabfrage (mit Platzhaltern) als Parameter an diese Methode.

PreparedStatement pstmt = con.prepareStatement("INSERT INTO MyTableVALUES(?, ?)");

Schritt 3: Wert für den Platzhalter festlegen

Verwenden Sie die Setter-Methode der Schnittstelle PreparedStatement, um den Wert für den Platzhalter festzulegen. Wählen Sie eine Methode basierend auf dem Datentyp der Spalte. Wenn die Spalte beispielsweise vom Typ VARCHAR ist, verwenden Sie die Methode setString(); wenn die Spalte vom Typ INT ist, können Sie die Methode setInt() verwenden.

Wenn die Spalte vom Typ Blob ist, können Sie den Wert dafür mit der Methode setBinaryStream() oder setBlob() festlegen. Diesen Methoden werden eine Ganzzahlvariable, die den Parameterindex darstellt, und ein Objekt der InputStream-Klasse als Parameter übergeben.

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

Schritt 4: Anweisung ausführen

Verwenden Sie die Methode execute() der Schnittstelle PreparedStatement, um das oben erstellte PreparedStatement-Objekt auszuführen.

Blobs aus der Datenbank abrufen

Die getBlob()-Methode der ResultSet-Schnittstelle akzeptiert eine Ganzzahl, die den Index der Spalte darstellt (oder einen Zeichenfolgenwert, der den Spaltennamen darstellt), ruft den Wert der angegebenen Spalte ab und gibt ihn zurück die Form eines Blob-Objekts. Die

getBytes()

-Methode der

while(rs.next()) {
   rs.getString("Name");
   rs.getString("Type");
   Blob blob = rs.getBlob("Logo");
}
Blob-Schnittstelle ruft den Inhalt des aktuellen Blob-Objekts ab und gibt ihn als Byte-Array zurück. p>

Mit der Methode getBlob() können Sie den Inhalt des Blobs in ein Byte-Array übertragen und mit der Methode write() ein Bildobjekt FileOutputStream erstellen.

byte byteArray[] = blob.getBytes(1,(int)blob.length());
FileOutputStream outPutStream = new FileOutputStream("path");
outPutStream.write(byteArray);

Beispiel

Das folgende Beispiel erstellt eine Tabelle vom Blob-Datentyp in einer MySQL-Datenbank und fügt ein Bild darin ein. Rufen Sie es ab und speichern Sie es im lokalen Dateisystem.

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

Ausgabe

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

Das obige ist der detaillierte Inhalt vonWas ist der JDBC-Blob-Datentyp? Wie speichert und liest man die darin enthaltenen Daten?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:tutorialspoint.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen