Blob (objeto grande binario), un objeto binario grande, es un contenedor que puede almacenar archivos binarios. En las computadoras, las blobs son a menudo el tipo de campo utilizado en bases de datos para almacenar archivos binarios. Las blobs son un archivo grande. Las blobs típicas son una imagen o un archivo de sonido. Debido a su tamaño, deben procesarse de manera especial (por ejemplo: cargar, descargar o almacenarlos en una base de datos).
1. Conceptos básicos
En el desarrollo real, a veces es necesario usar programas para guardar directamente los datos grandes o los datos binarios en la base de datos para el almacenamiento.
Para MySQL, solo hay gotas, pero no hay clobs. MySQL usa texto para almacenar texto grande, y el texto y las blobs se dividen en:
TinyText, Text, MediumText y LongText
TinyBlob, Blob, MediumBlob y Longblob
2. Construya un entorno de prueba
2.1. La estructura del proyecto de prueba construida
Como se muestra en la imagen:
2.2. Escriba el archivo de configuración de DB.Properties
controlador = com.mysql.jdbc.driverurl = jdbc: mysql: // localhost: 3306/jdbcstudyusername = rootpassword = xdp
2.3. Escribir clase de herramienta jdbcutils
paquete 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; públicas JECT; controlador de cadena estática = nulo; cadena estática privada url = nulo; Nombre de usuario de cadena estática privada = nulo; Password de cadena estática privada = NULL; static {try {// lee la información de conexión de la base de datos en el archivo db.properties inputStream in = jdbcutils.class.getclassLoader (). getResourCeasstream ("db.properties"); Propiedades prop = new Properties (); prop.load (in); // Obtenga el controlador de controlador de conexión de la base de datos = prop.getProperty ("controlador"); // Obtener la dirección de la conexión de la base de datos URL url = prop.getProperty ("url"); // Obtenga la conexión de la base de datos Nombre de usuario de usuario = prop.getProperty ("nombre de usuario"); // Obtener la contraseña de conexión de la base de datos contraseña = prop.getProperty ("contraseña"); // Cargar el controlador de la base de datos Class.forname (controlador); } Catch (Exception e) {arrojar una nueva excepcióninInitializerError (e); }} / *** @method: getConnection* @Description: Obtenga el objeto de conexión de la base de datos* @anthor: el lofty wolf** @return conexión de la base de datos del objeto de conexión* @throws sqlexception* / public static conexión getConnection () lanza sqlexception {return drivermanager.getConnection (url, username, contraseña); } / ** * @method: versión * @Description: Release Resources, * Los recursos que se publicaron incluyen el objeto de conexión de base de datos de conexión, el objeto de declaración responsable de ejecutar los comandos SQL y el objeto de resultSet que almacena los resultados de consulta * @anthor: 光克 * * @param Conn * @param st * @param rs * / public void versión (Connection Connsion, Conn. if (rs! = null) {try {// Cierre el objeto de resultSet que almacena los resultados de la consulta rs.close (); } catch (Exception e) {E.PrintStackTrace (); } rs = nulo; } if (st! = null) {try {// cierre el objeto de declaración responsable de ejecutar comandos sql st.close (); } catch (Exception e) {E.PrintStackTrace (); }} if (conn! = null) {try {// cierre el objeto de conexión de la base de datos de conexión conn.close (); } catch (Exception e) {E.PrintStackTrace (); }}}} 3. Use JDBC para procesar un texto grande en MySQL
Para el tipo de texto en MySQL, se puede llamar al siguiente método para configurarlo
PrepareStatement.Setcharacterstream (índice, lector, longitud); // Tenga en cuenta que la longitud debe establecerse y establecerse en INT tipo
Para los tipos de texto en MySQL, puede llamar al siguiente método para obtenerlos.
lector = resultSet.getCharActerStream (String columnLabel); 2 cadena s = resultset.getString (String columnLabel);
3.1. Ejemplo de prueba
1. Escribe scripts de prueba SQL
Crear base de datos JDBCStudy; use JDBCStudy; Crear tabla TestClob (ID int primario Key Auto_Increment, reanudar texto);
2. Escriba el código de prueba de la siguiente manera:
paquete 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; import java.sql.Resultset; import me.gacl.jdbutilement; org.junit.test;/*** @classname: jdbCoperaclob* @Description: use jdbc para operar un texto grande de mysql* @author: lonely canglang* @date: 2014-9-19 10:10:04 PM **/clase pública JdbCoperaclob {/*** @method: @Deseting: ADET* @Anthor: 发年 * */ @test public void add () {Connection conn = null; Preparado ST = NULL; ResultSet rs = null; Lector lector = null; intente {conn = jdbcutils.getConnection (); Cadena sql = "insertar en valores de testClob (currículum) (?)"; st = conn.preparestatement (SQL); // La ruta obtenida de esta manera, los espacios en los que el espacio se reemplazará por "%20" usando "string ruta = jdbCoperaclob.class.getClassLoader (). GetResource (" data.txt "). GetPath (); // reemplazar"%20 "Volver a la ruta del espacio = ruta.replaceall ("%20 "," "); File de archivo = nuevo archivo (reemplazar"); FileReader (archivo); Jdbcutils.release (conn, st, rs); "Seleccione Reanudar desde TestClob donde ID = 2"; // use resultadoset.getCharacterStream ("Nombre de campo") para obtener el contenido del lector de lector de datos de texto grande = rs.getCharActerStream ("reanudar"); Char buffer [] = nuevo char [1024]; int len = 0; FileWriter out = new FileWriter ("D: //1.txt"); while ((len = lector.read (buffer))> 0) {contentstr += new String (buffer); out.write (buffer, 0, len); } out.close (); lector.close (); } System.out.println (contenido); System.out.println ("-----------------------------------------------"); System.out.println (contentstr); } catch (Exception e) {E.PrintStackTrace (); } finalmente {jdbcutils.release (conn, st, rs); }}}4. Use JDBC para procesar los datos binarios de MySQL
Para el tipo de blob en MySQL, se puede llamar a la siguiente configuración del método:
Preparada setBinaryStream (i, inputStream, longitud);
Para el tipo de blob en MySQL, puede llamar al siguiente método para obtener:
InputStream in = resultSet.getBinaryStream (String columnLabel); inputStream in = resultset.getBlOB (String columnLabel) .getBinaryStream ();
4.1. Ejemplo de prueba
1. Escribe scripts de prueba SQL
Crear tabla testBlob (ID int primario clave auto_increment, imagen longblob);
2. Escriba el código de prueba de la siguiente manera:
paquete me.gacl.demo; import java.io.file; import java.io.fileInputStream; import java.io.fileOutputStream; import java.io.inputstream; import java.sql.connection; import java.sql.preparedStatement; import java.sql.Result; import; import; import; importar; import; me.gacl.utils.jdbcutils; import org.junit.test;/ *** @classname: jdbCoperaclob* @Description: use jdbc para manipular los datos binarios de MySQL (como imágenes, sonidos, textos binarios)* @Author: Luke Canglang* @Date: 2014-9-19 10:10:04 pM) JdbCoperableB { / *** @method: add* @Description: inserte datos binarios en la base de datos* @anthor: Luke CANGLANG** / @test public void add () {Conexión conn = null; Preparado ST = NULL; ResultSet rs = null; intente {conn = jdbcutils.getConnection (); Cadena sql = "insertar en valores de prueba (imagen) (?)"; st = conn.preparestatement (SQL); // La ruta obtenida de esta manera, los espacios en ella serán reemplazados por "%20" en lugar de la ruta de cadena = jdbCoperableB.class.getClassLoader (). GetResource ("01.jpg"). GetPath (); // reemplazar "%20" se reemplazará con la ruta de los espacios = rath.replaceall ("%20", ""); Archivo archivo = nuevo archivo (ruta); FileInputStream Fis = new FileInputStream (archivo); // La transmisión generada St.SetBinaryStream (1, FIS, (int) File.Length ()); int num = St.ExecuteUpdate (); if (num> 0) {System.out.println ("¡Inserte con éxito!"); } fis.close (); } catch (Exception e) {E.PrintStackTrace (); } finalmente {jdbcutils.release (conn, st, rs); }} / *** @method: read* @Description: Leer datos binarios en la base de datos* @anthor: 六后** / @test public void read () {Connection conn = null; Preparado ST = NULL; ResultSet rs = null; intente {conn = jdbcutils.getConnection (); String sql = "Seleccione Imagen de TestBlob Where id =?"; st = conn.preparestatement (SQL); Stsetint (1, 1); rs = St.ExecuteQuery (); if (rs.next ()) {// inputStream in = rs.getBlob ("imagen"). getBinaryStream (); // Este método también puede ser inputStream in = rs.getBinaryStream ("imagen"); int len = 0; byte buffer [] = nuevo byte [1024]; FileOutputStream out = new FileOutputStream ("d: //1.jpg"); while ((len = in.read (buffer))> 0) {out.write (buffer, 0, len); } in.close (); out.close (); }} catch (Exception e) {E.PrintStackTrace (); } finalmente {jdbcutils.release (conn, st, rs); }}}Lo anterior es todo el contenido de este artículo. Espero que sea útil para el aprendizaje de todos y espero que todos apoyen más a Wulin.com.