Blob (binäres großes Objekt), ein großes binäres Objekt, ist ein Container, der binäre Dateien speichern kann. In Computern sind Blobs häufig der Feldtyp, der in Datenbanken verwendet wird, um Binärdateien zu speichern. Blobs sind eine große Datei. Typische Blobs sind ein Bild oder eine Tondatei. Aufgrund ihrer Größe müssen sie auf besondere Weise verarbeitet werden (zum Beispiel: Hochladen, Herunterladen oder Speichern in einer Datenbank).
1. Grundkonzepte
In der tatsächlichen Entwicklung ist es manchmal erforderlich, Programme zu verwenden, um große Text- oder Binärdaten direkt in die Datenbank für den Speicher zu sparen.
Für MySQL gibt es nur Blobs, aber keine Crobs. MySQL verwendet Text, um großen Text zu speichern, und Text und Blobs sind unterteilt in:
TinyText, Text, MediumText und Longtext
Tinyblob, Blob, Mediumblob und Longblob
2. Erstellen Sie eine Testumgebung
2.1. Die Testprojektstruktur erstellt
Wie im Bild gezeigt:
2.2. Schreiben Sie die Konfigurationsdatei db.properties
Driver = com.mysql.jdbc.driverurl = jdbc: mysql: // localhost: 3306/jdbcstudyusername = rootPassword = xdp
2.3. Schreiben Sie die JDBCutils -Toolklasse
Paket me.gacl.utils; import Java.io.inputstream; Import Java.sql.Connection; Import Java.Sql.Drivermanager; Import Java.sql.resultset; importieren java.sql.sqLexception; privat klassistent; String driver = null; private statische String -URL = NULL; private statische String username = null; private statische String -Passwort = null; static {try {// Lesen Sie die Datenbankverbindungsinformationen in der Datei db.Properties InputStream in = jdbcutils.class.getClassloader (). getResourceAsStream ("db.properties"); Eigenschaften prop = neue Eigenschaften (); prop.load (in); // den Datenbankverbindungs -Treiber treiber = prop.getProperty ("Treiber"); // Erhalten Sie die Datenbankverbindung URL -Adresse url = prop.getProperty ("url"); // Erhalten Sie die Datenbankverbindung Benutzername username = prop.getProperty ("Benutzername"); // Erhalten Sie das Datenbankverbindungskennwort Passwort = prop.getProperty ("Passwort"); // laden Sie die Datenbank -Treiberklasse.forname (Treiber); } catch (Ausnahme e) {werfen neu ausnahmeminitializerError (e); }} / *** @Method: GetConnection* @Description: Holen Sie sich das Datenbankverbindungsobjekt* @Anthor: Der hohe Wolf** @return Connection -Datenbankverbindungsobjekt* @Throws SQLEXception* / public static Connection getConnection () löst SQLEXception zurück {Trivermanager.GetCon. } / ** * @Method: Release * @Description: Release -Ressourcen, * Die zu veröffentlichten Ressourcen enthalten das Verbindungsdatenbankverbindungsobjekt, das Anweisungsobjekt, das für die Ausführung von SQL -Befehlen verantwortlich ist, und das Ergebnisset -Objekt, das die Abfrageergebnisse speichert if (rs! } catch (Ausnahme e) {e.printstacktrace (); } rs = null; } if (st! } catch (Ausnahme e) {e.printstacktrace (); }} if (conn! = null) {try {// Das Verbindungsdatenbankverbindungsobjekt conn.close (); } catch (Ausnahme e) {e.printstacktrace (); }}}} 3.. Verwenden Sie JDBC, um großen Text in MySQL zu verarbeiten
Für den Texttyp in MySQL kann die folgende Methode aufgerufen werden, um es festzulegen
PrepectStatement.setcharacterstream (Index, Leser, Länge); // Beachten
Für Texttypen in MySQL können Sie die folgende Methode aufrufen, um sie zu erhalten.
Reader = resultSet.getaracterStream (String columnLabel); 2 String s = resultSet.getString (String columnLabel);
3.1. Testbeispiel
1. Schreiben Sie SQL -Testskripte
Datenbank erstellen jdbcStudy; Verwenden Sie JDBCStudy; TABLE testclob erstellen (ID int Primärschlüssel Auto_increment, Lebenslauf Text);
2. Schreiben Sie den Testcode wie folgt:
Paket me.gacl.demo; import Java.io.file; Import Java.io.Filereader; Import Java.io.FileWriter; Import Java.io.reader; Import Java.sql.connection; me.gacl.utils.jdbcutils; import org.junit.test;/*** @className: JdbCoperaclob* @Description: Verwenden Sie JDBC, um einen großen Text von MySQL* @Author: Lonely Canglang* @date: 2014-9-19 10:10. @Method: Hinzufügen * @Description: Fügen Sie große Textdaten in die Datenbank ein * @anthor: 发年 * */ @test public void add () {connection conn = null; PrepedStatement ST = NULL; ResultSet rs = null; Reader reader = null; try {conn = jdbcutils.getConnection (); String SQL = "In TestClob (Lebenslauf) Werte (?) Einfügen"; ST = Conn.Preparestatement (SQL); // Der auf diese Weise erhaltene Pfad wird die Räume, in denen der Speicherplatz durch "%20" verwendet wird, mit "String path = jdbCoperaclob.class.getClasloader (). GetResource (" Data.txt "). GetPath (); // Ersetzen Sie"%20 "zurück in die Space Path. FileReader (Datei); Jdbcutils.Release (conn, st, rs); "Lebenslauf aus TestcLOB, wobei ID = 2"; // Verwenden Sie resultSet.getaracterStream ("Feldname"), um den Inhalt des Leser von großem Textdaten Reader = rs.getaracterstream ("Lebenslauf") zu erhalten. char buffer [] = new char [1024]; int len = 0; FileWriter out = new FileWriter ("d: //1.txt"); while ((len = reader.read (puffer))> 0) {contentStr += neuer String (Buffer); out.write (Puffer, 0, Len); } out.close (); reader.close (); } System.out.println (Inhalt); System.out.println ("-------------------------------------------"); System.out.println (ContentSTR); } catch (Ausnahme e) {e.printstacktrace (); } endlich {jdbcutils.release (conn, st, rs); }}}4. Verwenden Sie JDBC, um MySQL -Binärdaten zu verarbeiten
Für den Blob -Typ in MySQL können die folgenden Methodeneinstellungen aufgerufen werden:
Vorbereitete Station. setBinaryStream (i, InputStream, Länge);
Für den Blob -Typ in MySQL können Sie die folgende Methode aufrufen, um zu erhalten:
InputStream in = resultSet.getBinaryStream (String columnLabel); inputStream in = resultSet.getBlob (String columnLabel) .getBinaryStream ();
4.1. Testbeispiel
1. Schreiben Sie SQL -Testskripte
table testblob erstellen (ID int Primärschlüssel Auto_increment, Bild Longblob);
2. Schreiben Sie den Testcode wie folgt:
Paket me.gacl.demo; import java.io.file; import java.io.fileinputstream; import Java.io.fileOutputStream; Import Java.io.inputStream; Import Java.sql.Connection; me.gacl.utils.jdbcutils; import org.junit.test;/ *** @className: jdbCoperaclob* @Description: Verwenden Sie JDBC, um MySQLs Binärdaten (wie Bilder, Klänge, Klänge, Binärtexte) zu manipulieren. JDBCOPERABOB { / *** @Method: add* @Description: Binäre Daten in die Datenbank einfügen PrepedStatement ST = NULL; ResultSet rs = null; try {conn = jdbcutils.getConnection (); String SQL = "In testblob (Bild) Werte (?) Einfügen"; ST = Conn.Preparestatement (SQL); // Der auf diese Weise erhaltene Pfad wird die darin enthaltenen Räume durch "%20" anstelle von String path = jdbCoperablob.class.getClassloader () ersetzt. GetResource ("01.jpg"). GetPath (); // Ersetzen Sie "%20" ersetzt durch Spaces path = path.replaceall ("%20", ""); Datei Datei = neue Datei (Pfad); FileInputStream fis = new FileInputStream (Datei); // Der generierte Stream St.SetBinaryStream (1, FIS, (int) Datei.Length ()); int num = St.ExecuteUpdate (); if (num> 0) {System.out.println ("erfolgreich einfügen!"); } fis.close (); } catch (Ausnahme e) {e.printstacktrace (); } endlich {jdbcutils.release (conn, st, rs); }} / *** @Method: read* @Description: Binärdaten in der Datenbank lesen* @anthor: 六后** / @Test public void read () {connection conn = null; PrepedStatement ST = NULL; ResultSet rs = null; try {conn = jdbcutils.getConnection (); String sql = "Bild aus testblob auswählen wobei id =?"; ST = Conn.Preparestatement (SQL); St.Setint (1, 1); rs = St.ExecuteQuery (); if (rs.Next ()) {// InputStream in = rs.getBlob ("Bild"). getBinaryStream (); // Diese Methode kann auch in = rs.getBinaryStream ("Bild") eingabetream in = rs.getBinary ("Bild"); int len = 0; Byte Buffer [] = neues Byte [1024]; FileOutputStream out = new FileOutputStream ("d: //1.jpg"); while ((len = in.read (puffer))> 0) {out.write (puffer, 0, len); } in.close (); out.close (); }} catch (Ausnahme e) {e.printstacktrace (); } endlich {jdbcutils.release (conn, st, rs); }}}Das obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, es wird für das Lernen aller hilfreich sein und ich hoffe, jeder wird Wulin.com mehr unterstützen.