- 浏览: 225327 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
synack:
写的很好,图文并茂,语言简单清晰,赞!
SkipList 跳表 -
king_c:
jiandandecaicai 写道你好,请教一下是如何通过E ...
从Hadoop URL 中读取数据 -
jiandandecaicai:
你好,请教一下是如何通过Eclipse来连接Hadop机群的, ...
从Hadoop URL 中读取数据
一、MySQL BLOB 类型介绍 二、mysql中的blob存取 create table Dish { int id; blob photo; }; 下面是从数据库里写的方法: String filepath = (String)session.getAttribute("file");//这里获得的是用jspsmartupload上传的文件的路径 String erpsql = "insert into Dish values(?,?)"; 下面是从数据库里读的方法: 1.BufferedInputStream inputimg = null; try { Connection con = sqlDS.getConnection();//简写,获得数据库连接 Statement stmt = con.createStatement(); ResultSet rs = stmt.executeQuery("select from Dish where id = 11"); if(rs.next()){ java.sql.Blob blob = (java.sql.Blob)rs.getBlob("photo"); input = new BufferedInputStream(blob.getBinaryStream); } BufferedImage image = null; image = javax.imageio.ImageIo.read(input); ServlerOutputStream sos = response.getOutputStream(); JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(sos); encoder.encode(image); input.close(); }catch(Exception e) { e.printStackTrace(); } 2. if(rs.next()){ res.setContentType ("image/jpeg;charset=GB2312");//HttpServletResponse res if(jpgData.available () <= 0x0)//判断数据库里存放图片的字段是否有值,可以进行其他处理 } 3. if(rs.next()){ res.setContentType("image/jpeg"); } 三、charset设置对blog操作的影响 存储txt文件的时候没有问题;存储图片也没问题,但是再把图片图片从数据库中取出来,不能正常显示了;存储word格式的文件报错,如下: Caused by: java.sql.BatchUpdateException: Syntax error or access violation message from server: "You have an error in your SQL syntax near ''D0CF11E0A1B11AE1000000000000000000000000000000003E000300FEFF0900060000000000000' at line 1" 查了一下可能是charset编码的问题,于是将原来的连接字符串设置为: 问题解决了,不仅能支持各种格式的文件,图片也显示正常了。如果设置为其他的字符集就会出现前面的错误。 四、max_allowed_packet参数设置 往数据库中存储较大的文件是出现如下错误: 这是因为存入的文件大于mysql默认的 max_allowed_packet值。 解决办法:在mysql安装目录下的my.ini文件中的最后一行添加 五、效率问题 利用数据库存储大量文件时,查询效率就会变得很低。 在表的设计上,我们可以选择吧文件的相关信息存在一个表中fileInfo,而吧文件内容存在另一个表中 fileContent,fileContent中有一个指向fileInfo的外键。这样,查询的时候只需要访问fileInfo,只有当要访问某个文 件具体内容的时候才访问fileContent表。分表存储,能够显著提高查询速度。 ----------------------------- 向MySQL数据库插入Blob数据的问题
MySQL中,BLOB是一个二进制大型对象,是一个可以存储大量数据的容器,它能容纳不同大小的数据。BLOB类型实际是个类型系列(TinyBlob、Blob、MediumBlob、LongBlob),除了在存储的最大信息量上不同外,他们是等同的。
MySQL的四种BLOB类型
类型 大小(单位:字节)
TinyBlob 最大 255B
Blob 最大 65K
MediumBlob 最大 16M
LongBlob 最大 4G
实际使用中根据需要存入的数据大小定义不同的BLOB类型。
需要注意的是:如果你存储的文件过大,数据库的性能会下降很多。
File file = new File(filepath);
FileInputStream fin = new FileInputStream(file);
dataBS = new blobConn();
con = dataBS.getConn();
PreparedStatement stmt = con.prepareStatement(erpsql);
stmt.setString(2,String.valueOf(id));
stmt.setBinaryStream(3,fin,(int)file.length());//想数据库里插入是很简单的,就一行,但这种方法只有mysql可以用
stmt.executeUpdate();
fin.close();
stmt.close();
con.close();
ServletOutputStream out = res.getOutputStream ();
BufferedInputStream jpgData = new BufferedInputStream (rs.getBinaryStream ("photo"));
byte [] buf = new byte [4*1024];
int len;
res.sendRedirect ("/images/nophoto.gif");
while((len = jpgData.read (buf, 0, buf.length)) != -1)
out.write (buf, 0, len);
ServletOutputStream out=res.getOutputStream();
InputStream in=rs.getBinaryStream("photo");
byte buff[]=new byte[1024];
int i;
while((i=in.read(buff))!=-1){
out.write(buff);
}
in.close();
out.close();
at com.mysql.jdbc.PreparedStatement.executeBatch(PreparedStatement.java:1540)
[摘要]:在使用Hibernate向数据库插入Blob二进制数据时,发生如下错误:SQL Error: 1064, SQLState: 42000 。You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '??^5b??08""199G?"0Px8=?ü??Y??ó??l%P?[
¨???ó`-??F????:???S?a?@??Zu??' at line 1
[关键字]:MySQL、Blob、图片、image、java、Hibernate、Clob、&
[环境]:5.1.34-community MySQL Community Server (GPL),Hibernate 3.2.5
[作者]:Winty (wintys@gmail.com) http://www.blogjava.net/wintys
[错误]:
使用Hibernate向数据库插入Blob二进制数据,程序如下:
User user = new User();
Transaction tc = null;
try{
Session session = HibernateUtil.getSession();
tc = session.beginTransaction();
user.setName("The Name");
FileInputStream fin = new FileInputStream("rc/redheart.gif");
Blob image = Hibernate.createBlob(fin);
user.setImage(image);
File file = new File("rc/news.txt");
FileReader fr = new FileReader(file);
BufferedReader br = new BufferedReader(fr);
Clob info = Hibernate.createClob(br , (int)file.length());
user.setInfo(info);
session.save(user);
tc.commit();
}catch(Exception e){
if(tc != null){
tc.rollback();
}
System.err.println(e.getMessage());
}finally{
HibernateUtil.closeSession();
}
}
00:33:45,671 WARN JDBCExceptionReporter:77 - SQL Error: 1064, SQLState: 42000
00:33:45,671 ERROR JDBCExceptionReporter:78 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '??^5b??08""199G?"0Px8=?ü??Y??ó??l%P?[
¨???ó`-??F????:???S?a?@??Zu??' at line 1
00:33:45,687 ERROR AbstractFlushingEventListener:301 - Could not synchronize database state with session
org.hibernate.exception.SQLGrammarException: Could not execute JDBC batch update
at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:67)
at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:43)
at org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:253)
at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:237)
at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:141)
at org.hibernate.event.def.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:298)
at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:27)
at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1000)
at org.hibernate.impl.SessionImpl.managedFlush(SessionImpl.java:338)
at org.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:106)
at wintys.hibernate.blobclob.UserDAOBean.insert(UserDAOBean.java:41)
at wintys.hibernate.blobclob.UserTest.main(UserTest.java:18)
Caused by: java.sql.BatchUpdateException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '??^5b??08""199G?"0Px8=?ü??Y??ó??l%P?[
¨???ó`-??F????:???S?a?@??Zu??' at line 1
at com.mysql.jdbc.PreparedStatement.executeBatchSerially(PreparedStatement.java:1693)
at com.mysql.jdbc.PreparedStatement.executeBatch(PreparedStatement.java:1108)
at org.hibernate.jdbc.BatchingBatcher.doExecuteBatch(BatchingBatcher.java:48)
at org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:246)
... 9 more
Could not execute JDBC batch update
Hibernate: select user0_.id as id0_, user0_.name as name0_, user0_.image as image0_, user0_.info as info0_ from db.myblobclob user0_
[原因]:
搜索了一下,错误原因可能为:"在定义字段时,不要和MYSQL的保留字段有相同的"。
检查了一下表中的字段名,没有发现问题:
id VARCHAR(100) NOT NULL,
name VARCHAR(100),
image BLOB,
info TEXT,
PRIMARY KEY(id)
);
如果把Blob相关的程序注释了,Clob数据能够正常写入。原因当然出在Blob数据的写入程序中。后来发现,把Blob写入的图片数据换成文本,却可以正常写入。可见,是二进制数据的编码问题。
[解决]:
将原来的数据连接:
jdbc:mysql://localhost:3306/db
</property>
<![CDATA[jdbc:mysql://localhost:3306/db?useUnicode=true&characterEncoding=utf-8]]>
</property>
Error parsing XML: /hibernate.cfg.xml(12) The reference to entity "characterEncoding" must end with the ';' delimiter.
也可以直接把&修改为&
即:
jdbc:mysql://localhost:3306/db?useUnicode=true&characterEncoding=utf-8
发表评论
-
MySQL大数据量分页SQL语句优化
2014-12-11 18:36 1480分页程序原理很简单,这里就不多说了,本篇文章主要说的是在数 ... -
MySQL性能优化点
2014-11-18 14:38 8271. 为查询缓存优化你的 sql query ... -
A small, easy to use Open Source Database Connection Pool Library
2013-10-28 11:13 619http://www.tildeslash.com/libz ... -
修改innodb_flush_log_at_trx_commit参数提升insert性能
2013-10-14 00:20 754最近,在一个系统的慢 ... -
mysql 导出数据到txt文件
2012-06-26 22:58 1295示例: SELECT email FROM xxxxx ... -
MySQL Replication(复制)基本原理
2012-04-04 22:29 7841、复制进程Mysql的复制(replication)是一个异 ... -
二十种实战调优MySQL性能优化的经验
2012-04-04 22:20 886本文将为大家介绍的 ... -
Mysql my.ini 配置文件详解
2012-04-04 21:21 1019Mysql my.ini 配置文件详 ... -
C#访问和操作MYSQL数据库
2012-03-23 09:59 1613这里介绍下比较简单的方式,引用MySql.Data.dll ... -
C#访问和操作MYSQL数据库
2012-03-23 09:58 1这里介绍下比较简单的方式,引用MySql.Data.dll ... -
Timeout expired. The timeout period elapsed prior ..
2012-02-26 19:13 1695关于这个问题,要 ... -
MySQL单表大小的限制
2012-02-09 11:01 910单表大小的限制在目前 ...
相关推荐
而在MySQL中,BLOB也有类似的分类,包括TINYBLOB、BLOB、MEDIUMBLOB和LONGBLOB,分别适用于不同大小的二进制数据。 从Oracle中提取BLOB照片的步骤如下: 1. **查询BLOB数据**:使用SQL查询语句从Oracle数据库中...
当我们需要在MySQL数据库中处理大对象(Binary Large Object,简称BLOB)时,如图片、音频或视频等非文本数据,就需要结合MySQL和Qt来完成。下面我们将详细讨论如何在MySQL和Qt环境下对BLOB数据类型进行操作。 首先...
本教程将深入探讨如何在Java环境下,批量地从MySQL数据库中下载存储在Blob字段中的图片,并将其保存到本地文件系统。 首先,我们需要理解Blob类型。Blob是MySQL中的一个数据类型,用于存储大量二进制数据。它分为四...
"MySQL 中的 BLOB 到文件的转换" 在 MySQL 数据库中,BLOB(Binary Large OBject)是一种二进制大对象类型,常用于存储图像、音频、视频和其他类型的文件。然而,在实际应用中,我们经常需要将 BLOB 数据转换为文件...
基于存储过程的MySQL数据库BLOB字段访问是指在MySQL数据库中使用存储过程来访问和处理二进制数据的方法。这种方法可以使得数据库的二进制数据处理变得更加方便和高效。 MySQL数据库提供了BLOB数据类型,可以用来...
`mysql_blob_tools`是一个针对MySQL数据库中Blob类型数据进行分析和统计的工具。它可以帮助用户处理和理解存储在Blob字段中的大量非结构化数据。 Blob类型在MySQL中有四种变体:TinyBlob、Blob、MediumBlob和...
mysql导出工具,可导出无注释插入语句,表中字段有blob类数据,插入语句前还有锁表操作语句,适合多种场景
1. **BLOB数据类型**:MySQL提供了四种不同类型的BLOB,包括TINYBLOB、BLOB、MEDIUMBLOB和LONGBLOB,它们分别可以存储的最大数据量不同。根据商品图片的大小,选择合适的数据类型很重要,以确保空间的有效利用。 2....
在MySQL中,Blob类型字段常用于存储大块的非结构化数据。本实例将详细介绍如何在MySQL数据库中插入Blob数据,并提供源码示例。 1. **Blob类型介绍** MySQL中的Blob类型有四种变体:TinyBlob、Blob、MediumBlob和...
在这个场景中,我们关注的是如何使用Java Server Pages(JSP)来操作MySQL数据库中的Blob(Binary Large Object)字段,这是一个用于存储大容量二进制数据如图片、文档或音频文件的特殊字段类型。以下是关于这个主题...
mysql写入或读取一段数据块时,数据类型为blob型,本代码详细介绍在mysqll中如何读写blob格式数据
在MySQL数据库中,Blob是一种特殊的数据类型,用于存储大量的二进制数据,如图片、音频文件或文档。Blob可以分为四种不同的子类型:TinyBlob、Blob、MediumBlob和LongBlob,每种类型根据能存储的最大数据量不同。这...
本篇文章将深入探讨如何在MySQL和Oracle数据库中插入Blob数据,并提供相关的源码实例。 一、MySQL中的Blob数据插入 MySQL提供了多种方式插入Blob数据,包括使用PreparedStatement接口。以下是一个Java源码示例: ...
本篇文章将深入探讨在使用Hibernate存储MySQL表中的BLOB(Binary Large Object)字段时可能遇到的问题以及解决策略。 BLOB类型在MySQL中用于存储大量的二进制数据,如图片、视频、文档等。Hibernate作为Java中的ORM...
MySQL中的BLOB类型是用于存储...总结来说,MySQL的BLOB类型是为了解决大数据存储问题,而PreparedStatement是Java中用来安全高效地操作BLOB字段的工具。正确理解和使用这些技术,对于处理大量的二进制数据至关重要。
Java中 Blob的插入与读取
在处理数据库中的BLOB(Binary Large Object)数据时,VB提供了丰富的功能。BLOB类型通常用于存储非结构化的数据,如图片、音频、视频或者任何二进制文件。以下将详细讲解如何利用VB来存取数据库中的BLOB数据。 ...
本项目以VC++6.0 MFC为基础,结合ODBC(Open Database Connectivity)技术,实现了将图片数据存储到MySQL数据库的BLOB(Binary Large Object)字段中。下面将详细讲解这个过程涉及的知识点。 首先,理解ODBC。ODBC...
本实例主要探讨如何利用Hibernate和Struts框架来处理MySQL数据库中的BLOB字段,实现文件的上传与下载功能。 **一、Hibernate框架** Hibernate是一个强大的Java持久化框架,它简化了数据库操作,提供了对象关系映射...