- 浏览: 669958 次
- 性别:
- 来自: 长沙
文章分类
- 全部博客 (364)
- quick start (57)
- bboss aop (43)
- bboss mvc (48)
- bboss persistent (96)
- bboss taglib (30)
- bboss event (10)
- bbossgroups (52)
- bboss (32)
- bboss会话共享 (17)
- bboss rpc (7)
- bboss 国际化 (5)
- bboss 序列化 (9)
- bboss cxf webservice (8)
- bboss hessian (3)
- bboss 安全认证SSO (15)
- bboss 工作流 (6)
- 平台 (18)
- bboss quartz (3)
- 杂谈 (5)
- 大数据 (1)
- bboss elastic (24)
- bboss http (1)
- bboss kafka (1)
- Elasticsearch Scroll和Slice Scroll查询API使用案例 (1)
最新评论
-
qianhao123:
...
采用gradle构建和发布bboss方法介绍 -
qianhao123:
[img][/img]
采用gradle构建和发布bboss方法介绍 -
yin_bp:
欢迎大家参与working
高性能elasticsearch ORM开发库使用介绍 -
qq641879434:
万分感谢
bboss 持久层sql xml配置文件编写和加载方法介绍 -
yin_bp:
qq641879434 写道怎么设置配置文件 可以查看执行的S ...
bboss 持久层sql xml配置文件编写和加载方法介绍
bboss项目下载列表 在sourceforge访问地址为:
https://sourceforge.net/project/showfiles.php?group_id=238653
bboss-persistent 1.0.2 下载地址
http://sourceforge.net/project/platformdownload.php?group_id=238653
bboss persistent框架提供了对大字段处理的封装,本文详细介绍具体的用法:
1.获取与blob和clob字段相关的流对象
2.直接获取操作lob字段包括增删改查4种操作,其中有通用的操作(适用于所有的数据库),针对oracle的操作方法。
下面详细介绍
获取与blob和clob字段相关的流对象
package com.frameworkset.common;
import java.sql.SQLException;
import com.frameworkset.common.poolman.DBUtil;
import com.frameworkset.common.poolman.PreparedDBUtil;
import com.frameworkset.common.poolman.handle.ValueExchange;
/**
* 测试如下方法是否正常工作
* dbUtil.getBinaryStream
* dbUtil.getUnicodeStream(
* dbUtil.getAsciiStream(
* getCharacterStream(
* <p>Title: TestStream.java</p>
*
* <p>Description: </p>
*
* <p>Copyright: Copyright (c) 2007</p>
* @Date Dec 5, 2008 3:12:22 PM
* @author biaoping.yin
* @version 1.0.1
*/
public class TestStream {
public static void testClob()
{
DBUtil dbUtil = new DBUtil();
try {
dbUtil.executeSelect("select clobname from test where id='0'");
System.out.println("BinaryStream:" + ValueExchange.getStringFromStream(dbUtil.getBinaryStream(0, 0)));
System.out.println("UnicodeStream:" + ValueExchange.getStringFromStream(dbUtil.getUnicodeStream(0, 0)));
System.out.println("AsciiStream:" + ValueExchange.getStringFromStream(dbUtil.getAsciiStream(0, 0)));
System.out.println("Reader:" + ValueExchange.getStringFromReader(dbUtil.getCharacterStream(0, 0)));
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static void testBlob()
{
PreparedDBUtil pdb = new PreparedDBUtil();
DBUtil dbUtil = new DBUtil();
try {
pdb.preparedUpdate("update test set blobname = ? where id = '0'");
pdb.setBlob(1, "blob".getBytes());
pdb.executePrepared();
dbUtil.executeSelect("select blobname from test where id='0'");
System.out.println("BinaryStream:" + ValueExchange.getStringFromStream(dbUtil.getBinaryStream(0, 0)));
System.out.println("UnicodeStream:" + ValueExchange.getStringFromStream(dbUtil.getUnicodeStream(0, 0)));
System.out.println("AsciiStream:" + ValueExchange.getStringFromStream(dbUtil.getAsciiStream(0, 0)));
/**
* blob类型的字段不能直接转换为Reader对象
*/
System.out.println("Reader:" + ValueExchange.getStringFromReader(dbUtil.getCharacterStream(0, 0)));
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static void main(String[] args)
{
testBlob();
}
}
直接获取操作lob字段包括增删改查4种操作,其中有通用的操作(适用于所有的数据库)和针对oracle的操作方法
/*
* Copyright 2008 biaoping.yin
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.frameworkset.common;
import javax.transaction.RollbackException;
import oracle.sql.BLOB;
import oracle.sql.CLOB;
import com.frameworkset.common.poolman.DBUtil;
import com.frameworkset.common.poolman.PreparedDBUtil;
import com.frameworkset.orm.transaction.TransactionManager;
/**
*
* <p>Title: TestLob.java</p>
*
* <p>
* Description:运行本类时必须下载 bboss persistent 框架的version 1.0.2 下载的地址如下:
* https://sourceforge.net/project/showfiles.php?group_id=238653
* </p>
*
* <p>Copyright: Copyright (c) 2007</p>
* @Date Dec 24, 2008 10:05:04 PM
* @author biaoping.yin
* @version 1.0
*/
public class TestLob {
/**
* 第一种插入blob字段的方法,通用的处理模式,适用于所有类型的数据库
*/
public static void testBlobWrite(String id)
{
PreparedDBUtil dbUtil = new PreparedDBUtil();
try {
dbUtil.preparedInsert( "insert into test(id,blobname) values(?,?)");
dbUtil.setString(1, id);
dbUtil.setBlob(2, new java.io.File("d:/内容管理系统升级步骤.txt"));//直接将文件存储到大字段中
dbUtil.executePrepared();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
finally
{
}
}
/**
* 针对oracle Blob字段的插入操作
*/
public static void testBigBlobWrite()
{
PreparedDBUtil dbUtil = new PreparedDBUtil();
TransactionManager tm = new TransactionManager();
try {
//启动事务
tm.begin();
//先插入一条记录,blob字段初始化为empty_lob
dbUtil.preparedInsert( "insert into test(id,blobname) values(?,?)");
String id = DBUtil.getNextStringPrimaryKey("test");
dbUtil.setString(1, id);
dbUtil.setBlob(2,BLOB.empty_lob());//先设置空的blob字段
dbUtil.executePrepared();
//查找刚才的插入的记录,修改blob字段的值为一个文件
dbUtil = new PreparedDBUtil();
dbUtil.preparedSelect("select blobname from test where id = ?");
dbUtil.setString(1, id);
dbUtil.executePrepared();
BLOB blob = (BLOB)dbUtil.getBlob(0, "blobname");
if(blob != null)
{
DBUtil.updateBLOB(blob, new java.io.File("d:/wls_docs92.chm"));
}
tm.commit();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
try {
tm.rollback();
} catch (RollbackException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
finally
{
tm = null;
dbUtil = null;
}
}
/**
* 第一种update blob字段的方法,通用的处理模式,适用于所有类型的数据库
*/
public static void testBlobUpdate()
{
PreparedDBUtil dbUtil = new PreparedDBUtil();
try {
dbUtil.preparedUpdate("update test set blobname= ? where id= ?");
dbUtil.setString(2, "12");
dbUtil.setBlob(1, new java.io.File("d:/readme.txt"));//直接将文件存储到大字段中
dbUtil.executePrepared();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
finally
{
dbUtil = null;
}
}
/**
* 针对oracle Blob字段的update操作
*/
public static void testBigBlobUpdate()
{
PreparedDBUtil dbUtil = new PreparedDBUtil();
TransactionManager tm = new TransactionManager();
try {
//启动事务
tm.begin();
//先查询id=12一条记录,以乐观锁的方式来处理这条记录,当有其他程序正在修改id=12的记录时,将抛出异常直接终止改修改操作
dbUtil.preparedSelect( "select id,blobname from test where id = ? for update nowait");
String id = "12";
dbUtil.setString(1, id);
dbUtil.executePrepared();
BLOB blob = (BLOB)dbUtil.getBlob(0, "blobname");
if(blob != null)
{
//更新blob字段的值
DBUtil.updateBLOB(blob, new java.io.File("d:/readme.txt"));
}
//提交事务
tm.commit();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
try {
//回滚事务
tm.rollback();
} catch (RollbackException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
finally
{
tm = null;
dbUtil = null;
}
}
/**
* 大字段的读取
*/
public static void testBlobRead()
{
PreparedDBUtil dbUtil = new PreparedDBUtil();
try {
//查询大字段内容并且将大字段存放到文件中
dbUtil.preparedSelect( "select id,blobname from test");
dbUtil.executePrepared();
for(int i = 0; i < dbUtil.size(); i ++)
{
dbUtil.getFile(i, "blobname", new java.io.File("d:/wls_docs921.chm"));//将blob字段的值转换为文件
// Blob blob = dbUtil.getBlob(i, "blobname");//获取blob字段的值到blob变量中。
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
finally
{
}
}
/**
* clob字段的写入
*/
public static void testClobWrite(String id)
{
PreparedDBUtil dbUtil = new PreparedDBUtil();
try {
dbUtil.preparedInsert( "insert into test(id,clobname) values(?,?)");
// dbUtil.setString(1, DBUtil.getNextStringPrimaryKey("test"));
dbUtil.setString(1, id);
dbUtil.setClob(2,"clobvalue");//直接将字符串存储到clob字段中,也可以直接使用dbUtil.setString(2,"clobvalue")来设置clob字段的值
dbUtil.executePrepared();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
finally
{
}
}
/**
* 针对oracle Clob字段的插入操作
*/
public static void testBigClobWrite()
{
PreparedDBUtil dbUtil = new PreparedDBUtil();
TransactionManager tm = new TransactionManager();
try {
//启动事务
tm.begin();
//先插入一条记录,blob字段初始化为empty_lob
dbUtil.preparedInsert( "insert into test(id,clobname) values(?,?)");
String id = DBUtil.getNextStringPrimaryKey("test");
dbUtil.setString(1, id);
dbUtil.setClob(2,CLOB.empty_lob());//先设置空的blob字段
dbUtil.executePrepared();
//查找刚才的插入的记录,修改blob字段的值为一个文件
dbUtil = new PreparedDBUtil();
dbUtil.preparedSelect("select clobname from test where id = ?");
dbUtil.setString(1, id);
dbUtil.executePrepared();
CLOB clob = (CLOB)dbUtil.getClob(0, "clobname");
if(clob != null)
{
DBUtil.updateCLOB(clob, new java.io.File("d:\\route.txt"));
}
tm.commit();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
try {
tm.rollback();
} catch (RollbackException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
finally
{
tm = null;
dbUtil = null;
}
}
/**
* clob字段的更新
*/
public static void testClobUpdate()
{
PreparedDBUtil dbUtil = new PreparedDBUtil();
try {
dbUtil.preparedUpdate( "update test set clobname=? where id='12'");
dbUtil.setClob(1,"clobvalue11111");//直接将字符串存储到clob字段中,也可以直接使用dbUtil.setString(2,"clobvalue")来设置clob字段的值
dbUtil.executePrepared();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
finally
{
}
}
/**
* 针对oracle Clob字段的修改操作
*/
public static void testBigClobUpdate()
{
PreparedDBUtil dbUtil = new PreparedDBUtil();
TransactionManager tm = new TransactionManager();
try {
//启动事务
tm.begin();
//先插入一条记录,blob字段初始化为empty_lob
dbUtil.preparedSelect( "select id,clobname from test where id='12' for update nowait");
dbUtil.executePrepared();
CLOB clob = (CLOB)dbUtil.getClob(0, "clobname");
if(clob != null)
{
DBUtil.updateCLOB(clob, new java.io.File("d:\\readme.txt"));
}
tm.commit();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
try {
tm.rollback();
} catch (RollbackException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
finally
{
tm = null;
dbUtil = null;
}
}
/**
* clob字段的读取
*/
public static void testClobRead()
{
PreparedDBUtil dbUtil = new PreparedDBUtil();
try {
//查询大字段内容并且将大字段存放到文件中
dbUtil.preparedSelect( "select id,clobname from test");
dbUtil.executePrepared();
for(int i = 0; i < dbUtil.size(); i ++)
{
dbUtil.getFile(i, "clobname", new java.io.File("d:/route" + i + ".txt")); //读取clob字段到文件中
// String clobvalue = dbUtil.getString(i, "clobname");//获取clob字段到字符串变量中
// Clob clob = dbUtil.getClob(i, "clobname");//获取clob字段值到clob类型变量中
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
finally
{
dbUtil = null;
}
}
public static void main(String[] args)
{
System.out.print("start.........");
DBUtil.debugMemory();
for(int i = 0; i < 1; i ++)
{
// String id = DBUtil.getNextStringPrimaryKey("test");
String id = "12";
// testBlobWrite(id);
testClobWrite( id);
// testBigBlobWrite();
// testClobWrite();
// testBigClobWrite();
}
// TestLob.testClobUpdate();
testBigClobUpdate();
// TestLob.testBlobUpdate();
// TestLob.testBigBlobUpdate();
// testBlobWrite();
// testBigBlobWrite();
// DBUtil.debugMemory();
// testBlobRead();
// testClobRead();
System.out.println("end.........");
DBUtil.debugMemory();
}
}
运行上述的测试示例,需要在数据库中执行以下脚本,脚本已经在oracle 10上测试通过:
drop table test;
CREATE TABLE TEST
(
NAME VARCHAR2(4000),
ID VARCHAR2(100)
);
drop table test1;
CREATE TABLE TEST1
(
A VARCHAR2(12)
);
DROP SEQUENCE SEQ_TEST;
CREATE SEQUENCE SEQ_TEST
START WITH 160
MAXVALUE 999999999999999999999999999
MINVALUE 0
NOCYCLE
CACHE 20
NOORDER;
drop table TABLEINFO cascade constraints
/
CREATE TABLE TABLEINFO
(
TABLE_NAME VARCHAR2(255) NOT NULL,
TABLE_ID_NAME VARCHAR2(255),
TABLE_ID_INCREMENT NUMBER(5) DEFAULT 1,
TABLE_ID_VALUE NUMBER(20) DEFAULT 0,
TABLE_ID_GENERATOR VARCHAR2(255),
TABLE_ID_TYPE VARCHAR2(255),
TABLE_ID_PREFIX VARCHAR2(255)
);
COMMENT ON TABLE TABLEINFO IS '表信息维护对象';
COMMENT ON COLUMN TABLEINFO.TABLE_NAME IS '表名称';
COMMENT ON COLUMN TABLEINFO.TABLE_ID_NAME IS '表的主键名称';
COMMENT ON COLUMN TABLEINFO.TABLE_ID_INCREMENT IS '表的主键递增量
缺省为1';
COMMENT ON COLUMN TABLEINFO.TABLE_ID_VALUE IS '主键当前值:缺省为0';
COMMENT ON COLUMN TABLEINFO.TABLE_ID_GENERATOR IS '自定义表主键生成机制
必需从
com.frameworkset.common.poolman.sql.PrimaryKey集成';
由于脚本太长,请下载附件:
- TestTransaction_sql.zip (960 Bytes)
- 下载次数: 5
发表评论
-
bboss 持久层数据源引用外部属性配置介绍
2018-12-29 21:47 988bboss 持久层数据源外部属性配置引用介绍 bboss持久 ... -
bboss持久层开启和关闭自带主键机制
2017-08-17 11:56 695bboss持久层开启和关闭自带主键机制 请访问文档: bbos ... -
bboss高性能db批处理功能使用方法介绍
2017-05-14 21:28 2064bboss持久层在v5.0.3.5中新增简单的高效的db批处理 ... -
bboss持久层公共sql片段定义和引用方法说明
2017-03-03 13:05 1063bboss持久层公共sql片段定义和引用方法说明 在配置sq ... -
最新版本mysql jdbc驱动包获取表定义信息空指针异常处理方法
2016-12-15 10:24 1277在使用最新的mysql-connector-java 6.0. ... -
持久层快速入门系列一
2016-08-19 13:00 1206持久层快速入门 先在应用中导入bboss 持久层(bboss ... -
bboss与spring中配置和引用bboss数据源和bboss dao组件方法说明
2016-08-10 16:04 866首先在项目中导入bboss 持久层包: maven坐标 & ... -
bboss 持久层sql xml配置文件编写和加载方法介绍
2016-04-05 13:14 1538bboss 持久层sql xml配置文件编写和加载方法介绍 通 ... -
bboss持久层设置数据库查询fetchsize参数方法
2015-11-06 11:54 966bboss持久层设置数据库查询fetchsize参数方法 j ... -
bboss持久层快速入门教程
2015-09-19 13:49 1529bboss持久层快速入门教程,快速搭建bboss持久层的开 ... -
bboss持久层数据库适配器编写和注册方法
2015-02-06 15:21 925bboss持久层数据库适配器编写和注册方法 bboss持久层默 ... -
bboss模糊查询、动态sql、批处理资料荟萃
2015-01-30 12:03 2274bboss模糊查询、动态sql、批处理资料荟萃 bboss持 ... -
bboss持久层查询元数据缓存机制开启方法
2014-11-18 12:03 971bboss持久层为了提升数据库查询操作性能,提供了对查 ... -
bboss内置数据源apache dbcp与druid数据源切换方法
2014-09-23 09:59 1328bboss内置数据源与druid数据源切换方法 bboss内置 ... -
bboss持久层多数据源配置及多数据库事务控制使用方法
2014-05-11 20:24 2854bboss持久层多数据源配置及使用方法,持久层框架及demo下 ... -
bboss持久层demo使用说明
2014-03-11 09:38 1124持久层案例可以用svn客户端下载eclipse工程,导入ecl ... -
bboss持久层More分页查询API使用介绍
2013-10-18 16:17 1325为了更好地提高数据库分页查询的效率,bboss持久层在Conf ... -
bboss持久层操作Clob和Blob字段示例
2013-09-09 13:29 1160bboss持久层操作Clob和Blob非常方便,基于bboss ... -
bboss持久层ormaping机制详解
2013-09-04 21:04 1094bboss持久层针对db操作即提供了原始sql语句的支持,又提 ... -
bboss持久层改进支持模块sql配置文件引用其它模块sql配置文件中sql语句
2013-09-01 22:23 888bboss持久层改进支持模块sql配置文件引用其它模块sql配 ...
相关推荐
bboss-datatran 由 bboss 开源的数据采集&流批一体化工具,提供数据采集、数据清洗转换处理和数据入库以及数据指标统计计算流批一体化处理功能。
bboss会话共享培训文档,学习bboss不可多得的资料,值得拥有。
bboss es特点请访问: https://www.oschina.net/p/bboss-elastic
企业级 J2EE 开源框架:bboss
NULL 博文链接:https://yin-bp.iteye.com/blog/926166
springboot集成ElasticsearchBboss调用Elasticsearch的案例分享
在不断的实践过程中,越来越多的好东西被吸纳到bboss这个大家庭中,使得bboss能够更好地应用于企业应用项目中,能够更好地解决开发过程中碰到的实际问题。基于bboss,可以快速地开发构建稳定、高效、健壮、可扩展的...
bboss+es基本操作示例,elasticsearch,bboss,java使用demo
资源目录: 项目源码(eshelloword.rar) bboss elasticsearch开发入门教程.wmv 搭建bboss elasticsearch开发环境.wmv 说明.txt
官方版本,亲测可用
NULL 博文链接:https://yin-bp.iteye.com/blog/2325602
Elasticsearch rest client bboss介绍-Elastic2018中国开发者大会演讲稿
NULL 博文链接:https://yin-bp.iteye.com/blog/2174863
NULL 博文链接:https://yin-bp.iteye.com/blog/2177475
浙江移动BBOSS系统快速入门手册V0.1归类.pdf
本bboss-datatran项目基于Java开发,包含591个文件,包括Java源代码、...系统实现了数据采集、数据清洗转换处理、数据入库以及数据指标统计计算的流批一体化处理功能,界面友好,功能完善,适合用于数据采集与处理。
NULL 博文链接:https://yin-bp.iteye.com/blog/1131637
bboss-datatran 由 bboss 开源的数据采集&流批一体化工具,提供数据采集、数据清洗转换处理和数据入库以及数据指标统计计算流批一体化处理功能。 同时也是一个高性能Elasticsearch orm 客户端,100%兼容es各个版本 ...
NULL 博文链接:https://yin-bp.iteye.com/blog/1449900