`
lucane
  • 浏览: 121680 次
  • 性别: Icon_minigender_1
  • 来自: 江湖
社区版块
存档分类
最新评论

textarea的内容保存到blob,然后读到textarea中显示出来

阅读更多
以下包括从网络上获取的内容和自己的一些理解,
可能存在不正确的地方,如遇到请指出,谢谢。

----------------------------------------------------------------SEPARATE-LINE----------------------------------------------------------------

万物起因

不允许的操作: streams type cannot be used in batching

operation not allowed: streams type cannot be used in batching



场景

Hibernate 2.1.4
将textarea中的值保存到Oracle的blob中,然后将blob保存的值显示在textarea中
http://www.iteye.com/problems/27144
当字节数超过一定大小时则出现如上的异常

BLOB指oracle.sql.BLOB,实现了java.sql.Blob
BlobImpl指hibernate.lob.BlobImpl,同样实现了java.sql.Blob

网上很多人都说将Hibernate的参数jdbc.batch_size的值设置为0即可解决问题
但我没有这么做
于是开始寻找解决办法
经典老帖"使用JDBC和Hibernate来写入Blob型数据到Oracle中":http://www.iteye.com/topic/254

我的想法一般都比较简单string2blob和blob2string就应该能解决问题
这其中要通过字节数组byte[]来过渡

于是想应该将Blob转成BLOB然后通过getBytes方法就可以拿到bytes
blob强转为BLOB报ClassCastException
Debug一看原来运行中的Blob是BlobImpl类型的
强转为BLOB当然产生ClassCastException

既然发现运行中的类型为BlobImpl,所以强转
因为看起来BlobImpl也有getBytes方法
if (true == blob instanceof BlobImpl) {
	BlobImpl bb = (BlobImpl) blob;
	bytes = bb.getBytes(0, (int) bb.length());
}

但无法调用BlobImpl.getBytes方法,出现如下异常
java.lang.UnsupportedOperationException: Blob may not be manipulated from creating session

还是Google
原来Blob类型的只能用两个方法
https://forum.hibernate.org/viewtopic.php?t=933977
引用
As u can see out of the sourcecode, every method do nothing but:
Code:
throw new UnsupportedOperationException("Blob may not be manipulated from creating session");

The only to methods who are implemented really, are:
getBinaryStream()

length()


So use those instead of getBytes()

Why they used the text "Blob may not be manipulated" i can't say...
Maybe anybody can help us with that?

Greets


于是继续改代码

public static byte[] getBytes(Blob blob) throws SerialException,
		IOException, SQLException {
	if (null == blob || true != blob instanceof Blob)
		throw new IllegalArgumentException("LOBUtil.getBytes方法无法接受你传入的参数:"
				+ blob);
	byte[] bytes = null;
	if (true == blob instanceof BlobImpl) {
		InputStream is = blob.getBinaryStream();
		bytes = IOUtil.newInstance().getBytes(is);
	} else if (true == blob instanceof BLOB) {
		bytes = ((BLOB) blob).getBytes();
	}
	return bytes;
}


这样就应该没啥大问题了





分享到:
评论
4 楼 lucane 2010-07-09  
确实是应当把clob或blob分离出来,但是因为历史遗留项目,所以hbt版本这些东西都定死了
3 楼 jasonshi 2010-02-20  
textarea的话,用clob比blob要好。
如果是oracle数据库,在最新jdbc driver下,可以直接用string的方式去访问clob字段,没有差别的。

最好将blob/clob独立成一个表,其他表需要的是否放一个clob/blob表的id,这样只需要在一个地方处理clob/clob的问题,lob数据大时,也可以用到一些lazy load的优化
2 楼 ltl3884 2009-10-22  
lszwycn 写道
hibernate 3.5中实现了两个新的类型text, image, 当前还没有release,可以看看svn中的代码



test111
1 楼 lszwycn 2009-10-22  
hibernate 3.5中实现了两个新的类型text, image, 当前还没有release,可以看看svn中的代码

相关推荐

    mardown,txt,浏览器实时文件内容写入保存,不会触发下载(是实时写入和保存)

    例如,我们可以使用`mardown.js`中的代码来监听textarea或富文本编辑器的输入变化,并同步到Web Storage或File API中。 4. 避免触发下载:通常,浏览器会将文件下载链接视为下载操作,但可以通过创建一个Blob URL...

    jquery_jpaLob.rar

    在响应处理函数中,可以将返回的BLOB或CLOB内容显示在网页上。 ```javascript $.ajax({ url: 'api/data/lob', type: 'GET', success: function(response) { if (response.blobData) { // 将BLOB内容转化为图片...

    js按钮导出word

    另外,对于图片,由于ActiveXObject方式不支持直接插入图片,所以通常需要先将图片转换为Base64编码,然后在Word文档中插入一个包含Base64编码的`<img>`标签,用户在打开Word文档时,Word会自动解析并显示图片。...

    vue实现类似淘宝商品评价页面星级评价及上传多张图片功能

    - 使用`<textarea>`元素来输入评价内容,通过`v-model`双向绑定输入的文字到`inputText`变量,同时设置`maxlength`属性限制最多200个字符。可以通过CSS样式设置`textarea`的边框为`none`以去掉默认边框。 ```html...

    文章的添加和修改(带富文本框)

    在数据库设计中,文章内容可能作为一个单独的字段存储,类型通常为可存储大量文本的BLOB或TEXT类型。 在“article”这个文件夹中,可能包含了与文章添加和修改功能相关的代码文件,如HTML模板、CSS样式表、...

    VUE动态生成word的实现

    表单中可以包含各种表单项,如文本输入框()、日期选择器()、文本区域(<textarea>)等。这些表单项是用户输入信息的界面元素,也是动态生成Word文档内容的来源。 3. 表单验证:Vue.js通过使用v-model指令实现...

    Django的富文本框中tiny_mce需要的js文件

    TinyMCE是一个功能强大的JavaScript WYSIWYG(所见即所得)文本编辑器,它允许用户以类似Word的方式编辑网页内容。本篇文章将深入探讨Django集成TinyMCE所需的JavaScript文件以及如何在项目中设置和使用它们。 首先...

    使用FileReader API创建Vue文件阅读器组件

    当用户选择了文件时,loadTextFromFile方法将被触发,并将文件读取出来,并将其显示在textarea中。 为了使用这个组件,我们可以将其挂载到#app的div元素下,并将其绑定到textarea上: ```html <textarea rows=...

    ASP+Ckeditor上传图片配置Demo和文档说明

    - 服务器端代码需要接收这个请求,解析上传的文件,保存到服务器上的特定目录,并返回一个成功或失败的响应,CKEditor会根据这个响应更新编辑器中的图片URL。 5. **安全与优化**: - 图片上传应考虑安全问题,...

    TinyMCE 实现本地图片上传

    TinyMCE是一款强大的富文本编辑器,广泛应用于网页和应用程序中,允许用户创建和编辑具有丰富格式的内容。它提供了丰富的API和插件,使得开发者能够定制编辑器功能以满足特定需求。在本教程中,我们将深入探讨如何在...

    layui 富文本编辑JS文件

    在提交表单前,需要先将TinyMCE的HTML内容转换为字符串,然后设置到对应的textarea字段。 ```javascript form.on('submit(submitForm)', function(data) { var content = tinymce.activeEditor.getContent(); // ...

    Vimsert-crx插件

    贡献它在这里:http://github.com/gabesullice/vimsert 控制: 打开编辑:Ctrl + I(在Textarea中) 写入变化:Esc,:W 关闭编辑:Esc,:Q 写下,然后关闭:ESC,:WQ 此项目使用ACE代码编辑器。 信息可以在...

    从入门到精通HTML5——PDF——网盘链接

     15.1.2 使用blob接口获取文件的类型与大小 282  15.1.3 通过类型过滤选择的文件 283  15.2 使用FileReader接口读取文件 285  15.2.1 检测浏览器是否支持FileReader接口 285  15.2.2 FileReader接口的方法 ...

    dbform

    12. tableData标签、confTableData标签和queryData标签:这三个标签用于外部数据的嵌入,通常与radio、checkbox或select标签配合使用,以便于在下拉列表或选择框中显示预定义的数据选项。其中,confTableData还支持...

    Html5程序设计基础教程(练习题参考答案)

    - 用于高亮文本,用于表示日期和时间,用于显示度量,展示进度条。 - HTML5提供了Canvas和SVG两个图形绘制技术,Canvas用于动态图形,SVG用于矢量图形。 - 在数据存储方面,HTML5引入了Web Storage(包括...

    宝信ipalat4j文档

    - **实现上传到数据库功能**:介绍了如何将文件存储到数据库中。 - **实现从数据库下载功能**:说明了如何从数据库中下载文件。 ##### 9. 演示BLOB、CLOB使用页面 - **页面功能**:介绍了BLOB(Binary Large Object...

    Html5程序设计基础教程(练习题参考答案) (2).pdf

    - 文件API允许用户选择并操作本地文件,如FileList、File、Blob和FileReader对象,支持上传和读取文件。 这个基础教程涵盖了HTML5的核心概念,为初学者提供了全面的学习资源,通过练习题的解答,可以加深对HTML5的...

    Laravel开发-laravel-tinymce-simple-imageupload

    在上面的代码中,我们接收上传的文件,为其生成一个唯一的文件名,然后将其存储到`public/uploads`目录下。返回JSON响应包含图片的URL。 接下来,定义一条路由来处理图片上传请求: ```php // routes/web.php ...

    【JavaScript源代码】如何在vue3.0+中使用tinymce及实现多图上传文件上传公式编辑功能.docx

    为了实现公式编辑功能,你需要引入`mathjax`插件,然后在`toolbar`配置中添加`mathjax`按钮。此外,还需要在`init`中配置MathJax的相关选项,如下: ```javascript import 'tinymce/plugins/mathjax' // 引入公式...

    JavaScript中文参考手册

    此参考中包含的内容 此参考是依照 JavaScript 语言的功能组织的。有时你已经知道了某个对象或方法的名称,但是不太清楚要在哪里能够找到它。这一章包含了解决此种情况的链接表。 轻松上手 本书是 JavaScript 语言的...

Global site tag (gtag.js) - Google Analytics