O BLOB (objeto grande binário), um grande objeto binário, é um contêiner que pode armazenar arquivos binários. Nos computadores, os blobs geralmente são o tipo de campo usado em bancos de dados para armazenar arquivos binários. Blobs são um arquivo grande. Blobs típicos são uma imagem ou um arquivo de som. Devido ao seu tamanho, eles devem ser tratados de uma maneira especial (por exemplo: fazer upload, baixar ou armazená -los em um banco de dados).
1. Conceitos básicos
No desenvolvimento real, às vezes é necessário usar programas para salvar diretamente dados grandes ou dados binários no banco de dados para armazenamento.
Para o MySQL, existem apenas bolhas, mas não há clobs. O MySQL usa o texto para armazenar um texto grande, e o texto e as bolhas são divididos em:
TinyText, texto, MediumText e LongText
Tinyblob, Blob, Mediumblob e Longblob
2. Construa um ambiente de teste
2.1. A estrutura do projeto de teste construída
Como mostrado na imagem:
2.2. Escreva o arquivo de configuração do db.properties
driver = com.mysql.jdbc.driverurl = jdbc: mysql: // localhost: 3306/jdbcstudyusername = rootpassword = xdp
2.3. Escreva a classe de ferramentas jdbcutils
pacote me.gacl.utils; importar java.io.inputStream; importar java.sql.connection; importar java.sql.driverManager; importar java.sql.resultset; importação java.sql.sqLexception; import java.sql.Statement; importar java.sql.sqLexception; import.StorsTent; Driver string = null; String estática privada url = nula; nome de string estática privada nome de usuário = null; senha de sequência estática privada = nulo; estático {try {// Leia as informações de conexão do banco de dados no arquivo db.properties inputStream em = jdbcutils.class.getclassloader (). getResourceasStream ("db.properties"); Propriedades prop = new Properties (); Prop.Load (in); // Obtenha o driver de conexão do banco de dados = Prop.getProperty ("driver"); // Obtenha o endereço de conexão do banco de dados URL url = prop.getProperty ("url"); // obtenha o nome de usuário do banco de dados nome de usuário = prop.getProperty ("nome de usuário"); // Obtenha a senha da conexão do banco de dados senha = prop.getProperty ("senha"); // Carregar a classe Driver de banco de dados.ForName (driver); } catch (Exceção e) {lança nova excepçãoinInitializerError (e); }} / *** @method: getConnection* @Description: Obtenha o objeto de conexão do banco de dados* @Anthor: The Lofty Wolf** @return Connection Database Conexão } / ** * @Method: Release * @Description: Recursos de liberação, * Os recursos a serem divulgados incluem o objeto de conexão do banco de dados de conexão, o objeto de instrução responsável pela execução dos comandos SQL e o objeto ResultSet que armazena os resultados da consulta * @Anthor: 光克 * * @Param Conn * @@Sel ST * @param rs * / public STATILHELHET: {光克 光克 * * @param Conn * if (rs! = null) {tente {// fechar o objeto ResultSet que armazena os resultados da consulta rs.close (); } catch (Exceção e) {e.printStackTrace (); } rs = null; } if (st! = null) {tente {// feche o objeto de instrução responsável pela execução de comandos sql s.Close (); } catch (Exceção e) {e.printStackTrace (); }} if (conn! = null) {try {// Fechar o objeto de conexão do banco de dados de conexão Conn.Close (); } catch (Exceção e) {e.printStackTrace (); }}}} 3. Use JDBC para processar um texto grande em MySQL
Para o tipo de texto em MySQL, o seguinte método pode ser chamado para defini -lo
PreparedStatement.SetcharActerStream (índice, leitor, comprimento); // Observe que o comprimento deve ser definido e definido como Int Type
Para tipos de texto no MySQL, você pode chamar o seguinte método para obtê -los.
leitor = resultSet.getCharacterStream (string columnLabel); 2 string s = resultSet.getString (string columnLabel);
3.1. Exemplo de teste
1. Escreva scripts de teste SQL
Criar banco de dados jdbcStudy; use jdbcStudy; crie tabela testclob (id int primária AUTO_INCREMRENT, retomar o texto);
2. Escreva o código de teste da seguinte forma:
pacote me.gacl.demo; importar java.io.file; importar java.io.fileReader; importar java.io.filewriter; importar java.io.reader; importar java.sql.connection; import java.sql.preedstatement; import java.sql.RESST; me.gacl.utils.jdbcutils; importar org.junit.test;/*** @className: jdbcoperaclob* @Description: use jdbc para operar um grande texto de mysql* @author: lonnely canglang* @date: 2014-9-9-19 10:044 PM** @Method: Add * @Description: Insira grandes dados de texto no banco de dados * @anthor: 发年 * */ @test public void add () {conexão conn = null; Preparado estatement st = null; ResultSet rs = null; Leitor leitor = null; tente {conn = jdbcutils.getConnection (); String sql = "inserir em testclob (currículo) valores (?)"; st = Conn.Preparestatement (SQL); // O caminho obtido dessa maneira, os espaços nos quais o espaço será substituído por "%20" usando "String Path = jdbcoperaclob.class.getClassLoader (). GetResource (" data.txt "). FILHO (FILE); Jdbcutils.release (conn, st, rs); "Selecione o currículo de TestClob, onde ID = 2"; // Use ResultSetSet.getCharacterStream ("Nome do campo") para obter o conteúdo do leitor de dados de texto grande leitor = rs.getCharacterStream ("retomar"); char buffer [] = novo char [1024]; int len = 0; FileWriter out = new FileWriter ("d: //1.txt"); while ((len = leitor.read (buffer))> 0) {contentStr += new String (buffer); out.write (buffer, 0, len); } out.close (); leitor.close (); } System.out.println (content); System.out.println ("---------------------------------------------"); System.out.println (contentStr); } catch (Exceção e) {e.printStackTrace (); } finalmente {jdbcutils.release (Conn, st, rs); }}}4. Use JDBC para processar dados binários do MySQL
Para o tipo de blob no MySQL, as seguintes configurações de método podem ser chamadas:
Preparado. setbinarystream (i, inputstream, comprimento);
Para o tipo de blob no MySQL, você pode chamar o seguinte método para obter:
InputStream in = ResultSet.getBinaryStream (String columnLabel); inputStream in = ResultSet.getBlob (String columnLabel) .getBinaryStream ();
4.1. Exemplo de teste
1. Escreva scripts de teste SQL
Criar tabela testblob (id int primário chave auto_increntle, imagem longblob);
2. Escreva o código de teste da seguinte forma:
pacote me.gacl.demo; importar java.io.file; importar java.io.fileInputStream; importar java.io.fileOutputStream; importar java.io.inputStream; importação java.sql.Connection; import java.sql.presectemeStemeStent; me.gacl.utils.jdbcutils; importar org.junit.test;/ *** @className: jdbcoperaclob* @Description: use JDBC para manipular o MySQL de dados binários do MySQL (como imagens, sons bininariamente)* @author: Lukekengng *date (como imagens, sons bininariamente)* @author: Lukekengg *date *date: sons, sons bininariamente)* @Author: Lukekengn. JDBCoperAblob { / *** @Method: Add* @Description: Insira dados binários no banco de dados* @Anthor: Luke canglang** / @Test public void add () {conexão conn = null; Preparado estatement st = null; ResultSet rs = null; tente {conn = jdbcutils.getConnection (); String sql = "inserir em testblob (imagem) valores (?)"; st = Conn.Preparestatement (SQL); // O caminho obtido dessa maneira, os espaços serão substituídos por "%20" em vez de string path = jdbcoperablob.class.getclassloader (). GetResource ("01.jpg"). GetPath (); // Substitua "%20" será substituído por espaços caminho = path.replaceall ("%20", ""); Arquivo de arquivo = novo arquivo (caminho); FileInputStream fis = new FileInputStream (File); // O fluxo gerado St.SetBinaryStream (1, fis, (int) file.length ()); int num = st.executeUpdate (); if (num> 0) {System.out.println ("inserir com sucesso!"); } fis.close (); } catch (Exceção e) {e.printStackTrace (); } finalmente {jdbcutils.release (Conn, st, rs); }} / *** @method: leia* @Description: Leia dados binários no banco de dados* @Anthor: 六后** / @Test public void read () {conexão conn = null; Preparado estatement st = null; ResultSet rs = null; tente {conn = jdbcutils.getConnection (); String sql = "Selecione a imagem do testblob onde id =?"; st = Conn.Preparestatement (SQL); St.SetInt (1, 1); rs = st.executeQuery (); if (rs.Next ()) {// inputStream in = rs.getblob ("image"). getBinaryStream (); // Este método também pode ser inputStream em = rs.getBinaryStream ("imagem"); int len = 0; buffer de byte [] = novo 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 (Exceção e) {e.printStackTrace (); } finalmente {jdbcutils.release (Conn, st, rs); }}}O exposto acima é todo o conteúdo deste artigo. Espero que seja útil para o aprendizado de todos e espero que todos apoiem mais o wulin.com.