`
knight_black_bob
  • 浏览: 851163 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

mysql 存入 blob类型数据

    博客分类:
  • java
阅读更多

mysql 存入 blob类型数据

 

最佳 解决方案

如果是字符串 的 blob  , 在 bean 中 把 该字段 设置成 byte[]  即可,遇到汉字 不会乱码

如果是文件 可以采用下面方法。

 

 

 

 

 方案一

把String类型转为Blob类型很简单,只要将 newSerialBlob(String对象的.getBytes())就可以获得一个Blob对象,

 要是把Blob对象转为String 一种是new String(Blob.getBytes(0,Blob对象.length)) 可是在开发中这样是不行了,总提示一个错误,只有获得Blob对象的输入流才可以

 IntputStream is = Blob对象.getBinaryStream()在用该对的read()方法读取一个字节数组在转换为String

 

 

 方案二

1、在类中定义大字段:

Java代码  收藏代码
  1. public class informAffiche {  
  2.    private Blob content;  
  3.   
  4.   
  5. public void setcontent(Blob S_content)  
  6. {  
  7. content=S_content;  
  8. }  
  9. public Blob getcontent()  
  10. {  
  11. return content;  
  12. }  
  13.   
  14. }  

 

2、数据库中读取大字段内容并set进去:

Java代码  收藏代码
  1. while(rs.next())  
  2.     {  
  3. s.setcontent(rs.getBlob("content"));  
  4. }  

 

3、在页面得到

 

Java代码  收藏代码
  1. if (list.size()>0){  
  2.    s=(informAffiche)list.get(0);  
  3.  Blob blob= s.getcontent();  
  4.   
  5. if(blob == null || blob.length()==0){  
  6.     content = "";  
  7.   }else{  
  8.     content = new String(blob.getBytes((long)1, (int)blob.length()));  
  9.     System.out.println("content---->"+content);  
  10.   }  
  11.   
  12.   
  13. }  

 

4、页面输出:

<td><%=content  %></td>

 

 

 

 方案三

package org.util;  
import java.io.BufferedInputStream;  
import java.io.BufferedOutputStream;  
import java.io.File;  
import java.io.FileInputStream;  
import java.io.FileNotFoundException;  
import java.io.FileOutputStream;  
import java.io.IOException;  
import java.io.InputStream;  
import java.io.InputStreamReader;  
import java.io.OutputStream;  
import java.sql.Connection;  
import java.sql.PreparedStatement;  
import java.sql.ResultSet;  
import java.sql.SQLException;  
public class BlobTest {  
    /** 
     * @param args 
     * @throws SQLException  
     * @throws IOException  
     */  
    public static void main(String[] args) throws SQLException, IOException {  
        // TODO Auto-generated method stub  
        //create();  
        read(2);  
    }  
      
    //将二进制流存储入数据库blob字段类型。  
    public static void create() throws SQLException, IOException{  
        String sql = "insert into blob_test values(id,?)";  
          
        Connection conn = null;  
        PreparedStatement ps = null;  
          
        try{  
            conn = JdbcUtil.getInstance().getConnection();  
            ps = conn.prepareStatement(sql);  
            File file = new File("input_text_right.gif");  
            BufferedInputStream in = new BufferedInputStream(new FileInputStream(file));  
            ps.setBlob(1, in);  
            int id = ps.executeUpdate();  
            System.out.println("id:"+id);  
            in.close();  
        }finally{  
            JdbcUtil.free(null, ps, conn);  
        }  
    }  
      
    //读取二进制流,并写入新的文件  
    public static void read(int id) throws SQLException, IOException{  
        String sql = "select big_bit from blob_test where id=? limit 1";  
          
        Connection conn = null;  
        PreparedStatement ps = null;  
        ResultSet rs = null;  
        try{  
            conn = JdbcUtil.getInstance().getConnection();  
            ps = conn.prepareStatement(sql);  
            ps.setInt(1, id);  
            rs = ps.executeQuery();  
              
            byte[] b = new byte[1024];  
            while(rs.next()){  
                InputStream in = rs.getBinaryStream(1);//InputStream是字节输入流的所有类的超类  
                File file = new File("left.gif");  
                BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream(file));//BufferedOutputStream是缓冲的输出流  
                  
                for(int i=0; (i=in.read(b))>0;){//read方法接收byte数组,并将数据存储在缓冲数组b中  
                    out.write(b);//将指定的字节写入此缓冲的输出流。  
                }  
                out.close();//关闭此输出流并释放与此流有关的所有系统资源。  
            }  
              
              
        }finally{  
            JdbcUtil.free(rs, ps, conn);  
        }  
    }  
} 

 

 

public class PostJdbcDao extends JdbcDaoSupport implements PostDao {
private LobHandler lobHandler;
private DataFieldMaxValueIncrementer incre;
public LobHandler getLobHandler() {
   return lobHandler;
}
public void setLobHandler(LobHandler lobHandler) {
   this.lobHandler = lobHandler;
}
public void addPost(final Post post) {  
   String sql = " INSERT INTO t_post(post_id,user_id,post_text,post_attach)"
     + " VALUES(?,?,?,?)";
   getJdbcTemplate().execute(
     sql,
     new AbstractLobCreatingPreparedStatementCallback(
       this.lobHandler) {
      protected void setValues(PreparedStatement ps,
        LobCreator lobCreator) throws SQLException {
       ps.setInt(1, incre.nextIntValue()); 
       ps.setInt(2, post.getUserId()); 
       lobCreator.setClobAsString(ps, 3, post.getPostText());
       lobCreator.setBlobAsBytes(ps, 4, post.getPostAttach());
      }
     });
}
}

 

 

 方案四

<bean id="nativeJdbcExtractor"
   class="org.springframework.jdbc.support.nativejdbc.CommonsDbcpNativeJdbcExtractor"
   lazy-init="true" />
<bean id="oracleLobHandler"
   class="org.springframework.jdbc.support.lob.OracleLobHandler"
   lazy-init="true">
   <property name="nativeJdbcExtractor" ref="nativeJdbcExtractor" />
</bean>
<bean id="dao" abstract="true">
   <property name="jdbcTemplate" ref="jdbcTemplate" />
</bean>
<bean id="postDao" parent="dao"
   class="com.baobaotao.dao.jdbc.PostJdbcDao">
   <property name="lobHandler" ref="oracleLobHandler" />
</bean>
Oracle 10g或其他数据库如下设置:
<bean id="defaultLobHandler"
   class="org.springframework.jdbc.support.lob.DefaultLobHandler"
   lazy-init="true" />
<bean id="dao" abstract="true">
   <property name="jdbcTemplate" ref="jdbcTemplate" />
</bean>
<bean id="postDao" parent="dao"
   class="com.baobaotao.dao.jdbc.PostJdbcDao">
   <property name="lobHandler" ref="defaultLobHandler" />
</bean>

 

 

public List getAttachs(final int userId){
   String sql = "SELECT post_id,post_attach FROM t_post where user_id =? and post_attach is not null";
   return getJdbcTemplate().query(
       sql,new Object[] {userId},
       new RowMapper() {
        public Object mapRow(ResultSet rs, int rowNum) throws SQLException {
        Post post = new Post();
        int postId = rs.getInt(1);
         byte[] attach = lobHandler.getBlobAsBytes(rs, 2);
         post.setPostId(postId);
         post.setPostAttach(attach);
         return post;
        }
       });
}

 

 

 

 

 

 

 

 

分享到:
评论

相关推荐

    基于存储过程的MySQL数据库BLOB字段访问.pdf

    MySQL数据库提供了BLOB数据类型,可以用来存储二进制数据,而存储过程可以用来处理和访问这些二进制数据。存储过程可以将二进制数据分割成多个部分,并将其存储在数据库表中,然后可以通过存储过程来访问和处理这些...

    mysql,blob格式存储图片事例,商品展示页面

    1. **BLOB数据类型**:MySQL提供了四种不同类型的BLOB,包括TINYBLOB、BLOB、MEDIUMBLOB和LONGBLOB,它们分别可以存储的最大数据量不同。根据商品图片的大小,选择合适的数据类型很重要,以确保空间的有效利用。 2....

    Delphi 如何将二维数组数据 以Blob 存入数据库中 并读取 工程

    在本场景中,我们将探讨如何在 Delphi 中将二维数组数据转换为 Blob 数据,然后存入 MySQL 数据库,并从数据库中读取出来。 首先,我们需要了解 Delphi 中的二维数组和 Stream 对象的概念。二维数组是多个一维数组...

    jsp操作mysql数据库的blob字段

    - **读取并输出Blob数据**:使用Blob对象的`getBinaryStream()`方法获取输入流,将其内容写入ServletOutputStream,从而将文件数据发送到浏览器。 6. **安全和优化**: - **关闭资源**:操作完成后,记得关闭...

    利用VB存取数据库中BLOB数据

    5. 读取BLOB数据:读取BLOB数据时,同样使用`ADODB.Stream`对象。假设我们已经获取了包含BLOB数据的记录集,可以这样处理: ```vb Dim blobStream As New ADODB.Stream blobStream.Open blobStream.Write rs(...

    图片BASE64加密保存到数据库Blob类型中(放入数据库,并取出生成图片)

    本示例主要涉及的是如何将图片通过BASE64编码加密后存入数据库的Blob类型字段,并能从数据库中取出这些数据再还原成原始图片。以下是相关知识点的详细说明: 1. **BASE64编码**:BASE64是一种用于将二进制数据转换...

    VC++6.0 MFC使用ODBC链接MySQL把图片写入blob字段

    本项目以VC++6.0 MFC为基础,结合ODBC(Open Database Connectivity)技术,实现了将图片数据存储到MySQL数据库的BLOB(Binary Large Object)字段中。下面将详细讲解这个过程涉及的知识点。 首先,理解ODBC。ODBC...

    将图片存入mysql数据库中

    要从数据库中取出图片并显示,你需要先执行SQL查询,然后读取返回的BLOB数据,并将其写入响应流中供浏览器显示。例如,在PHP中: ```php $stmt = $pdo-&gt;prepare("SELECT avatar FROM users WHERE id = ?"); $stmt-&gt;...

    java如何将图片类型的数据存入mysql 数据库

    1. **选择合适的数据类型**: 在MySQL中,用于存储图片等二进制数据的字段类型通常是`BLOB`(Binary Large Object)。它能存储大量的二进制数据,如JPEG、PNG等图片格式。 2. **创建表结构**: 首先,你需要在...

    java将图片写入数据库,并读出来(blob clob)

    这个过程通常涉及到Blob和Clob数据类型,它们是Java中的两种特殊对象,用于存储大对象(LOB)。Blob用于存储二进制数据,如图片、音频或视频文件,而Clob则用于存储字符数据,比如长文本。以下是如何使用Java处理...

    java实现插入mysql二进制文件,blob类型,遇到问题及解决办法

    本文将详细介绍如何使用 Java 向 MySQL 数据库中插入 BLOB 类型的数据,并针对过程中可能遇到的一些常见问题及其解决方法进行讨论。 #### 二、MySQL 的四种 BLOB 类型 MySQL 提供了四种不同大小的 BLOB 类型,可以...

    用Connector或NET处理BLOB数据.pdf

    #### 二、MySQL BLOB数据类型简介 - **TINYBLOB**: 最大长度为255字节。 - **BLOB**: 最大长度为65,535字节。 - **MEDIUMBLOB**: 最大长度为16MB。 - **LONGBLOB**: 最大长度为4GB。 #### 三、配置MySQL服务器 为了...

    C#+Mysql将图片批量转为2进制并存入数据库中

    MySQL是一个开源的关系型数据库管理系统,它支持多种数据类型,包括BLOB(Binary Large Object),用于存储大块二进制数据。在C#中,我们可以通过`MySql.Data.MySqlClient`库与MySQL数据库进行交互。创建一个SQL ...

    Java+MySql图片数据保存与读取的具体实例

    在Java中,MySQL的JDBC驱动提供了处理Blob类型数据的能力,使得我们可以直接将图片文件的内容存入数据库。 1. **图片数据的保存** - **文件读取**:使用Java的`java.io.File`类读取图片文件,可以获取文件的字节...

    图片存入mySql数据库.pdf

    在MySQL中,BLOB是用来存储大量二进制数据的字段类型,它有几种不同的子类型,例如TINYBLOB、BLOB、MEDIUMBLOB和LONGBLOB,根据存储数据的大小来选择合适的类型。在此场景中,使用BLOB类型是为了保存图片的原始数据...

    PHP操作MySQL中BLOB字段的方法示例【存储文本与图片】

    MySQL提供了专门用于存储二进制大对象(Binary Large Object)的字段类型,即BLOB。BLOB类型非常适合用来存储大量的二进制数据,它包括四种类型,它们的最大存储容量分别是: 1. TinyBlob:最大255字节 2. Blob:...

    Java实现用Mysql存取图片操作实例

    在Java编程中,有时我们需要将图片等大容量的二进制数据存储到数据库中,MySQL提供了BLOB(Binary Large Object)类型,专门用于存储大块的二进制数据。本实例将详细介绍如何使用Java和MySQL进行图片的存取操作。 ...

    将图片存到数据库 mysql 项目 demo

    2. **MySQL数据库**:MySQL是一种流行的开源关系型数据库管理系统,它支持多种数据类型,包括BLOB(Binary Large Object),适合存储大块二进制数据,如图片。 3. **BLOB类型**:在MySQL中,BLOB类型用于存储非结构...

Global site tag (gtag.js) - Google Analytics