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、在类中定义大字段:
- public class informAffiche {
- private Blob content;
- public void setcontent(Blob S_content)
- {
- content=S_content;
- }
- public Blob getcontent()
- {
- return content;
- }
- }
2、数据库中读取大字段内容并set进去:
- while(rs.next())
- {
- s.setcontent(rs.getBlob("content"));
- }
3、在页面得到
- if (list.size()>0){
- s=(informAffiche)list.get(0);
- Blob blob= s.getcontent();
- if(blob == null || blob.length()==0){
- content = "";
- }else{
- content = new String(blob.getBytes((long)1, (int)blob.length()));
- System.out.println("content---->"+content);
- }
- }
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数据类型,可以用来存储二进制数据,而存储过程可以用来处理和访问这些二进制数据。存储过程可以将二进制数据分割成多个部分,并将其存储在数据库表中,然后可以通过存储过程来访问和处理这些...
1. **BLOB数据类型**:MySQL提供了四种不同类型的BLOB,包括TINYBLOB、BLOB、MEDIUMBLOB和LONGBLOB,它们分别可以存储的最大数据量不同。根据商品图片的大小,选择合适的数据类型很重要,以确保空间的有效利用。 2....
在本场景中,我们将探讨如何在 Delphi 中将二维数组数据转换为 Blob 数据,然后存入 MySQL 数据库,并从数据库中读取出来。 首先,我们需要了解 Delphi 中的二维数组和 Stream 对象的概念。二维数组是多个一维数组...
- **读取并输出Blob数据**:使用Blob对象的`getBinaryStream()`方法获取输入流,将其内容写入ServletOutputStream,从而将文件数据发送到浏览器。 6. **安全和优化**: - **关闭资源**:操作完成后,记得关闭...
5. 读取BLOB数据:读取BLOB数据时,同样使用`ADODB.Stream`对象。假设我们已经获取了包含BLOB数据的记录集,可以这样处理: ```vb Dim blobStream As New ADODB.Stream blobStream.Open blobStream.Write rs(...
本示例主要涉及的是如何将图片通过BASE64编码加密后存入数据库的Blob类型字段,并能从数据库中取出这些数据再还原成原始图片。以下是相关知识点的详细说明: 1. **BASE64编码**:BASE64是一种用于将二进制数据转换...
本项目以VC++6.0 MFC为基础,结合ODBC(Open Database Connectivity)技术,实现了将图片数据存储到MySQL数据库的BLOB(Binary Large Object)字段中。下面将详细讲解这个过程涉及的知识点。 首先,理解ODBC。ODBC...
要从数据库中取出图片并显示,你需要先执行SQL查询,然后读取返回的BLOB数据,并将其写入响应流中供浏览器显示。例如,在PHP中: ```php $stmt = $pdo->prepare("SELECT avatar FROM users WHERE id = ?"); $stmt->...
1. **选择合适的数据类型**: 在MySQL中,用于存储图片等二进制数据的字段类型通常是`BLOB`(Binary Large Object)。它能存储大量的二进制数据,如JPEG、PNG等图片格式。 2. **创建表结构**: 首先,你需要在...
这个过程通常涉及到Blob和Clob数据类型,它们是Java中的两种特殊对象,用于存储大对象(LOB)。Blob用于存储二进制数据,如图片、音频或视频文件,而Clob则用于存储字符数据,比如长文本。以下是如何使用Java处理...
本文将详细介绍如何使用 Java 向 MySQL 数据库中插入 BLOB 类型的数据,并针对过程中可能遇到的一些常见问题及其解决方法进行讨论。 #### 二、MySQL 的四种 BLOB 类型 MySQL 提供了四种不同大小的 BLOB 类型,可以...
#### 二、MySQL BLOB数据类型简介 - **TINYBLOB**: 最大长度为255字节。 - **BLOB**: 最大长度为65,535字节。 - **MEDIUMBLOB**: 最大长度为16MB。 - **LONGBLOB**: 最大长度为4GB。 #### 三、配置MySQL服务器 为了...
MySQL是一个开源的关系型数据库管理系统,它支持多种数据类型,包括BLOB(Binary Large Object),用于存储大块二进制数据。在C#中,我们可以通过`MySql.Data.MySqlClient`库与MySQL数据库进行交互。创建一个SQL ...
在Java中,MySQL的JDBC驱动提供了处理Blob类型数据的能力,使得我们可以直接将图片文件的内容存入数据库。 1. **图片数据的保存** - **文件读取**:使用Java的`java.io.File`类读取图片文件,可以获取文件的字节...
在MySQL中,BLOB是用来存储大量二进制数据的字段类型,它有几种不同的子类型,例如TINYBLOB、BLOB、MEDIUMBLOB和LONGBLOB,根据存储数据的大小来选择合适的类型。在此场景中,使用BLOB类型是为了保存图片的原始数据...
MySQL提供了专门用于存储二进制大对象(Binary Large Object)的字段类型,即BLOB。BLOB类型非常适合用来存储大量的二进制数据,它包括四种类型,它们的最大存储容量分别是: 1. TinyBlob:最大255字节 2. Blob:...
在Java编程中,有时我们需要将图片等大容量的二进制数据存储到数据库中,MySQL提供了BLOB(Binary Large Object)类型,专门用于存储大块的二进制数据。本实例将详细介绍如何使用Java和MySQL进行图片的存取操作。 ...
2. **MySQL数据库**:MySQL是一种流行的开源关系型数据库管理系统,它支持多种数据类型,包括BLOB(Binary Large Object),适合存储大块二进制数据,如图片。 3. **BLOB类型**:在MySQL中,BLOB类型用于存储非结构...