Blob (grand objet binaire), un grand objet binaire, est un conteneur qui peut stocker des fichiers binaires. Dans les ordinateurs, les blobs sont souvent le type de champ utilisé dans les bases de données pour stocker des fichiers binaires. Les blobs sont un grand fichier. Les blobs typiques sont une image ou un fichier son. En raison de leur taille, ils doivent être gérés de manière spéciale (par exemple: le téléchargement, les téléchargements ou les stocker dans une base de données).
1. Concepts de base
Dans le développement réel, il est parfois nécessaire d'utiliser des programmes pour enregistrer directement des données de texte ou binaires importantes dans la base de données pour le stockage.
Pour MySQL, il n'y a que des blobs, mais pas de clobs. MySQL utilise du texte pour stocker un grand texte, et le texte et les blobs sont divisés en:
Petit texte, texte, texte moyen et long texte
Tinyblob, blob, moyenblob et longblob
2. Construisez un environnement de test
2.1. La structure du projet de test construite
Comme indiqué dans l'image:
2.2. Écrivez le fichier de configuration db.properties
Driver = com.mysql.jdbc.driverurl = jdbc: mysql: // localhost: 3306 / jdbcstudyUserName = rootpassword = xdp
2.3. Écrivez la classe d'outils JDBcutils
Package me.gacl.utils; import java.io.inputStream; import java.sql.connection; import java.sql.drivermanager; import java.sql.resultset; import java.sql.sqlexception; import java.sql.statement; import java.util.properties; String String String = null; Url de chaîne statique privée = null; Nom de chaîne statique privée = NULL; Mot de passe de chaîne statique privée = null; static {try {// Lire les informations de connexion de la base de données dans le fichier db.properties inputStream dans = jdbcutils.class.getClassLoader (). getResourCeasStream ("db.properties"); Propriétés Prop = New Properties (); Prop.Load (in); // obtient le pilote de connexion de la base de données Connexion Driver = prop.getProperty ("Driver"); // obtient l'URL URL de connexion de la base de données URL = prop.getProperty ("URL"); // Obtenez la connexion de la base de données UserName nom d'utilisateur = prop.getProperty ("nom d'utilisateur"); // Obtenez le mot de passe de la connexion de la base de données = Prop.getProperty ("mot de passe"); // Chargez la classe Database Driver Class.Forname (Driver); } catch (exception e) {lancez une nouvelle exceptionIninitializerError (e); }} / ** * @Method: getConnection * @Description: Obtenez l'objet de connexion de la base de données * @anthor: le Lofty Wolf * * @return Connection Connection Object * @Throws SqException * / Public Static Connection GetConnection () lance Sqlexception {return drivermerManager.getConnection (URL, USERNAME, MOTSOT); } / ** * @Method: Release * @Description: Release Resources, * Les ressources à publier incluent l'objet de connexion de la base de données de connexion, l'objet de déclaration responsable de l'exécution des commandes SQL et l'objet de résultat qui stocke les résultats de la requête * @anthor: 光克 * * @param conn Conn * @param st * @param rs * / public static release (connexion Conn, instruction styt, résultat rs) { if (rs! = null) {try {// Fermez l'objet résultat qui stocke les résultats de la requête Rs.close (); } catch (exception e) {e.printStackTrace (); } rs = null; } if (st! = null) {try {// Fermez l'objet instruction responsable de l'exécution des commandes SQL St.Close (); } catch (exception e) {e.printStackTrace (); }} if (conn! = null) {try {// Fermer l'objet de connexion de la base de données de connexion Conn.close (); } catch (exception e) {e.printStackTrace (); }}}} 3. Utilisez JDBC pour traiter un grand texte dans MySQL
Pour le type de texte dans MySQL, la méthode suivante peut être appelée pour le définir
PréparéStatement.SetcharAtteTtream (index, lecteur, longueur); // Notez que la longueur doit être définie et définie sur Type int
Pour les types de texte dans MySQL, vous pouvez appeler la méthode suivante pour les obtenir.
Reader = resultSet.GetCharAtteTtream (String ColumnLabel); 2 String S = resultSet.getString (String ColumnLabel);
3.1. Exemple de test
1. Écrivez des scripts de test SQL
Créer une base de données JDBCSTUDY; Utiliser JDBCSTUDA; Créer Table TestCloB (ID int Int Primary Key Auto_inCment, CV Text);
2. Écrivez le code de test comme suit:
package me.gacl.demo; import java.io.file; import java.io.fileReader; import java.io.filewriter; import java.io.reader; import java.sql.connection; import java.sql.preparedstatement; importer java.sql.resultset; me.gacl.utils.jdbcutils; import org.junit.test; / *** @classname: jdbcoperaclob * @description: utilisez jdbc pour faire fonctionner un grand texte de mysql * @author: Lonely CanGlang * @date: 2014-9-1910:10:04 pm ** / Classe publique jdbcoperacl @Method: Add * @Description: insérer de grandes données de texte dans la base de données * @anthor: 发年 * * / @Test public void add () {connection conn = null; PréparetStatement st = null; ResultSet rs = null; Lecteur lecteur = null; essayez {conn = jdbcutils.getConnection (); String sql = "Insérer dans TestCloB (repseme) VALEUR (?)"; ST = Conn.PrepareStatement (SQL); // le chemin obtenu de cette manière, les espaces dans lesquels l'espace sera remplacé par "% 20" en utilisant "String Path = jdbCoperaclob.class.getClassloader (). GetResource (" data.txt "). GetPath (); // remplacer"% 20 "Retour à l'espace Path = Path.replaceall ("% 20 "," ""); file file = nouveau); FileReader (fichier); JDBCutils.release (Conn, ST, rs); "Sélectionner le REPORT DE TESTCLOB ID = 2"; // Utiliser resultSet.GetCharAtteTtream ("Nom de champ") pour obtenir le contenu de Large Text Data Reader = Rs.GetCharAtteTtream ("CV"); tampon char [] = nouveau char [1024]; int len = 0; FileWriter out = new FileWriter ("d: //1.txt"); while ((Len = reader.read (tampon))> 0) {contentestr + = new String (tampon); Out.Write (Buffer, 0, Len); } out.close (); Reader.Close (); } System.out.println (contenu); System.out.println ("-------------------------------------------"); System.out.println (ContentsTr); } catch (exception e) {e.printStackTrace (); } Enfin {Jdbcutils.release (Conn, St, RS); }}}4. Utilisez JDBC pour traiter les données binaires MySQL
Pour le type Blob dans MySQL, les paramètres de méthode suivants peuvent être appelés:
Préparation. SetBinaryStream (I, InputStream, Longueur);
Pour le type Blob dans MySQL, vous pouvez appeler la méthode suivante pour obtenir:
InputStream dans = resultSet.getBinaryStream (String ColumnLabel); InputStream dans = resultSet.getBlob (String ColumnLabel) .getBinaryStream ();
4.1. Exemple de test
1. Écrivez des scripts de test SQL
Créer une table TestBlob (id int primaire clé AUTO_INCRAMENT, Image LongBlob);
2. Écrivez le code de test comme suit:
package 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: utilisez jdbc pour manipuler les données binaires de mysql (telles que les images, les sons, les textes binaires) * @Author: Luke Canglang * @date: 2014-9-9-9 10:10:04 pm ** / Publique JDBCoperABLOB {/ ** * @Method: Add * @Description: Insérez des données binaires dans la base de données * @anthor: Luke canGlang * * / @test public void add () {Connection Conn = Null; PréparetStatement st = null; ResultSet rs = null; essayez {conn = jdbcutils.getConnection (); String sql = "Insérer dans TestBlob (image) VALEURS (?)"; ST = Conn.PrepareStatement (SQL); // Le chemin obtenu de cette manière, les espaces dedans seront remplacés par "% 20" au lieu de String Path = jdbCoperAbLob.class.getClassloader (). GetResource ("01.jpg"). GetPath (); // remplacer "% 20" sera remplacé par des espaces PATH = PATH.ReplaceALL ("% 20", ""); Fichier fichier = nouveau fichier (chemin); FileInputStream fis = new FileInputStream (fichier); // le flux généré St.SetBinaryStream (1, fis, (int) file.length ()); int num = St.ExecuteUpdate (); if (num> 0) {System.out.println ("Insérer avec succès!"); } fis.close (); } catch (exception e) {e.printStackTrace (); } Enfin {Jdbcutils.release (Conn, St, RS); }} / ** * @Method: Read * @Description: Lire les données binaires dans la base de données * @anthor: 六后 * * / @Test public void read () {connection conn = null; PréparetStatement st = null; ResultSet rs = null; essayez {conn = jdbcutils.getConnection (); String sql = "SELECT Image dans TestBlob où id =?"; ST = Conn.PrepareStatement (SQL); St.SetInt (1, 1); rs = St.ExecuteQuery (); if (Rs.Next ()) {// inputStream dans = Rs.GetBlob ("image"). getBinaryStream (); // Cette méthode peut également être InputStream dans = Rs.GetBinaryStream ("image"); int len = 0; tampon d'octet [] = nouveau octet [1024]; FileoutputStream out = new FileOutputStream ("d: //1.jpg"); while ((len = in.read (tampon))> 0) {out.write (tampon, 0, len); } in.close (); out.close (); }} catch (exception e) {e.printStackTrace (); } Enfin {Jdbcutils.release (Conn, St, RS); }}}Ce qui précède est tout le contenu de cet article. J'espère que cela sera utile à l'apprentissage de tous et j'espère que tout le monde soutiendra davantage Wulin.com.