/*
* 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 java.io.File;
import java.io.InputStream;
import java.sql.SQLException;
import java.util.HashMap;
import java.util.List;
import java.util.UUID;
import javax.transaction.RollbackException;
import org.junit.Test;
import com.frameworkset.common.poolman.CallableDBUtil;
import com.frameworkset.common.poolman.DBUtil;
import com.frameworkset.common.poolman.PreparedDBUtil;
import com.frameworkset.common.poolman.Record;
import com.frameworkset.common.poolman.SQLExecutor;
import com.frameworkset.common.poolman.SQLParams;
import com.frameworkset.common.poolman.handle.FieldRowHandler;
import com.frameworkset.orm.annotation.Column;
import com.frameworkset.orm.transaction.TransactionManager;
import oracle.sql.BLOB;
import oracle.sql.CLOB;
/**
*
* <p>Title: TestLob.java</p>
*
* <p>Description:
* CREATE
TABLE TEST
(
BLOBNAME BLOB,
CLOBNAME CLOB,
ID VARCHAR(100)
)
* </p>
*
* <p>Copyright: Copyright (c) 2007</p>
* @Date 2011-12-27 下午2:56:03
* @author biaoping.yin
* @version 1.0
*/
public class TestLob {
public static class LobBean
{
private String id;
@Column(type="blob")//指示属性的值按blob类型写入或者读取
private String blobname;
@Column(type="clob")//指示属性的值按clob类型写入或者读取
private String clobname;
@Column(name="name_")//指示属性名称与表字段名称映射关系,name属性对应于表中的name_字段
private String name;
@Column(dataformat="yyyy-mm-dd")//指示日期类型属性值的存储和读取转换日期格式
private String regdate;
// 。。。。。。
}
@Test
public void testNewSQLParamInsert() throws Exception
{
SQLParams params = new SQLParams();
params.addSQLParam("id", "1", SQLParams.STRING);
// ID,HOST_ID,PLUGIN_ID,CATEGORY_ID,NAME,DESCRIPTION,DATASOURCE_NAME,DRIVER,JDBC_URL,USERNAME,PASSWORD,VALIDATION_QUERY
params.addSQLParam("blobname", "abcdblob",
SQLParams.BLOB);
params.addSQLParam("clobname", "abcdclob",
SQLParams.CLOB);
SQLExecutor.insertBean("insert into test(id,blobname,clobname) values(#[id],#[blobname],#[clobname])", params);
}
@Test
public void testNewBeanInsert() throws Exception
{
LobBean bean = new LobBean();
bean.id = "2";
bean.blobname = "abcdblob";
bean.clobname = "abcdclob";
SQLExecutor.insertBean("insert into test(id,blobname,clobname) values(#[id],#[blobname],#[clobname])", bean);
}
@Test
public void testNewOrMappingQuery() throws Exception
{
// SQLParams params = new SQLParams();
// params.addSQLParam("id", "1", SQLParams.STRING);
// // ID,HOST_ID,PLUGIN_ID,CATEGORY_ID,NAME,DESCRIPTION,DATASOURCE_NAME,DRIVER,JDBC_URL,USERNAME,PASSWORD,VALIDATION_QUERY
// params.addSQLParam("blobname", "abcdblob",
// SQLParams.BLOB);
// params.addSQLParam("clobname", "abcdclob",
// SQLParams.CLOB);
LobBean bean = SQLExecutor.queryObject(LobBean.class,"select * from test");
System.out.println();
}
@Test
public void testNewOrMappingsQuery() throws Exception
{
// SQLParams params = new SQLParams();
// params.addSQLParam("id", "1", SQLParams.STRING);
// // ID,HOST_ID,PLUGIN_ID,CATEGORY_ID,NAME,DESCRIPTION,DATASOURCE_NAME,DRIVER,JDBC_URL,USERNAME,PASSWORD,VALIDATION_QUERY
// params.addSQLParam("blobname", "abcdblob",
// SQLParams.BLOB);
// params.addSQLParam("clobname", "abcdclob",
// SQLParams.CLOB);
List<LobBean> bean = SQLExecutor.queryList(LobBean.class,"select * from test");
System.out.println();
}
/**
* CREATE
TABLE CLOBFILE
(
FILEID VARCHAR(100),
FILENAME VARCHAR(100),
FILESIZE BIGINT,
FILECONTENT CLOB
)
*/
public @Test void uploadClobFile() throws Exception
{
File file = new File("D:\\1");
String sql = "";
try {
sql = "INSERT INTO CLOBFILE (FILENAME,FILECONTENT,fileid,FILESIZE) VALUES(#[filename],#[FILECONTENT],#[FILEID],#[FILESIZE])";
SQLParams sqlparams = new SQLParams();
sqlparams.addSQLParam("filename", file.getName(), SQLParams.STRING);
sqlparams.addSQLParamWithCharset("FILECONTENT", file,SQLParams.CLOBFILE,"UTF-8");
sqlparams.addSQLParam("FILEID", UUID.randomUUID().toString(),SQLParams.STRING);
sqlparams.addSQLParam("FILESIZE", file.length(),SQLParams.LONG);
SQLExecutor.insertBean(sql, sqlparams);
} catch (Exception ex) {
throw new Exception("上传附件关联临控指令布控信息附件失败:" + ex);
}
}
/**
* CREATE
TABLE CLOBFILE
(
FILEID VARCHAR(100),
FILENAME VARCHAR(100),
FILESIZE BIGINT,
FILECONTENT CLOB(2147483647)
)
*/
public @Test void updateClobFile() throws Exception
{
File file = new File("D:\\bbossgroups-3.5.1\\bboss-taglib\\readme.txt");
String sql = "";
TransactionManager tm = new TransactionManager();
try {
tm.begin();
SQLExecutor.queryField("select 1 as ss from CLOBFILE where fieldid=? for update nowait","11");//锁定记录
sql = "update CLOBFILE set FILECONTENT=#[FILECONTENT]) where fileid = #[FILEID])";
SQLParams sqlparams = new SQLParams();
sqlparams.addSQLParamWithCharset("FILECONTENT", file,SQLParams.CLOBFILE,"UTF-8");
sqlparams.addSQLParam("FILEID", "11",SQLParams.STRING);
SQLExecutor.updateBean(sql, sqlparams);
tm.commit();
} catch (Exception ex) {
throw new Exception("上传附件关联临控指令布控信息附件失败:" + ex);
}
finally
{
tm.release();
}
}
/**
* 上传附件
* @param inputStream
* @param filename
* @return
* @throws Exception
*/
public boolean uploadFile(InputStream inputStream,long size, String filename) throws Exception {
boolean result = true;
String sql = "";
try {
sql = "INSERT INTO filetable (FILENAME,FILECONTENT,fileid,FILESIZE) VALUES(#[filename],#[FILECONTENT],#[FILEID],#[FILESIZE])";
SQLParams sqlparams = new SQLParams();
sqlparams.addSQLParam("filename", filename, SQLParams.STRING);
sqlparams.addSQLParam("FILECONTENT", inputStream, size,SQLParams.BLOBFILE);
sqlparams.addSQLParam("FILEID", UUID.randomUUID().toString(),SQLParams.STRING);
sqlparams.addSQLParam("FILESIZE", size,SQLParams.LONG);
SQLExecutor.insertBean(sql, sqlparams);
} catch (Exception ex) {
ex.printStackTrace();
result = false;
throw new Exception("上传附件关联临控指令布控信息附件失败:" + ex);
} finally {
if(inputStream != null){
inputStream.close();
}
}
return result;
}
public File getDownloadFile(String fileid) throws Exception
{
try
{
return SQLExecutor.queryTField(
File.class,
new FieldRowHandler<File>() {
@Override
public File handleField(
Record record)
throws Exception
{
// 定义文件对象
File f = new File("d:/",record.getString("filename"));
// 如果文件已经存在则直接返回f
if (f.exists())
return f;
// 将blob中的文件内容存储到文件中
record.getFile("filecontent",f);
return f;
}
},
"select * from filetable where fileid=?",
fileid);
}
catch (Exception e)
{
throw e;
}
}
public File getDownloadClobFile(String fileid) throws Exception
{
try
{
return SQLExecutor.queryTField(
File.class,
new FieldRowHandler<File>() {
@Override
public File handleField(
Record record)
throws Exception
{
// 定义文件对象
File f = new File("d:/",record.getString("filename"));
// 如果文件已经存在则直接返回f
if (f.exists())
return f;
// 将blob中的文件内容存储到文件中
record.getFile("filecontent",f);
return f;
}
},
"select * from CLOBFILE where fileid=?",
fileid);
}
catch (Exception e)
{
throw e;
}
}
public void deletefiles() throws Exception
{
SQLExecutor.delete("delete from filetable ");
SQLExecutor.delete("delete from CLOBFILE ");
}
public List<HashMap> queryfiles() throws Exception
{
return SQLExecutor.queryList(HashMap.class, "select FILENAME,fileid,FILESIZE from filetable");
}
public List<HashMap> queryclobfiles()throws Exception
{
return SQLExecutor.queryList(HashMap.class, "select FILENAME,fileid,FILESIZE from CLOBFILE");
}
//
// public void downloadFileFromBlob(String fileid, final HttpServletRequest request,
// final HttpServletResponse response) throws Exception
// {
// try
// {
// SQLExecutor.queryByNullRowHandler(new NullRowHandler() {
//
// public void handleRow(Record record) throws Exception
// {
//
// StringUtil.sendFile(request, response, record
// .getString("filename"), record
// .getBlob("filecontent"));
// }
// }, "select * from filetable where fileid=?", fileid);
// }
// catch (Exception e)
// {
// throw e;
// }
// }
//
////
// public void downloadFileFromClob(String fileid, final HttpServletRequest request,
// final HttpServletResponse response) throws Exception
// {
//
// try
// {
// SQLExecutor.queryByNullRowHandler(new NullRowHandler() {
// @Override
// public void handleRow(Record record) throws Exception
// {
//
// StringUtil.sendFile(request, response, record
// .getString("filename"), record
// .getClob("filecontent"));
// }
// }, "select * from CLOBFILE where fileid=?", fileid);
// }
// catch (Exception e)
// {
// throw e;
// }
//
// }
// @BeforeClass
public static void createTable()
{
String proce =
// "CREATE OR REPLACE PROCEDURE tt"+
// " AS " +
"begin "+
"execute immediate 'drop table test'; "+
"execute immediate 'create table test(id number(10),blobname blob,clobname clob)'; "+
"execute immediate 'delete from TABLEINFO where table_name=''test'''; "+
"execute immediate 'INSERT INTO TABLEINFO ( TABLE_NAME, TABLE_ID_NAME, TABLE_ID_INCREMENT, TABLE_ID_VALUE,"+
"TABLE_ID_GENERATOR, TABLE_ID_TYPE, TABLE_ID_PREFIX ) VALUES ("+
"''test'', ''id'', 1, 0, NULL, ''int'', NULL)'; "+
"commit; "+
"EXCEPTION "+
"when others then "+
"execute immediate 'create table test(id number(10),blobname blob,clobname clob)'; " +
"execute immediate 'delete from TABLEINFO where table_name=''test'''; "+
"execute immediate 'INSERT INTO TABLEINFO ( TABLE_NAME, TABLE_ID_NAME, TABLE_ID_INCREMENT, TABLE_ID_VALUE,"+
"TABLE_ID_GENERATOR, TABLE_ID_TYPE, TABLE_ID_PREFIX ) VALUES ("+
"''test'', ''id'', 1, 0, NULL, ''int'', NULL)'; "+
"commit;"+
"END;";
// String proce = "{begin "+
// "execute immediate 'drop table test'; "+
// "execute immediate 'create table test(id number(10),blobname blob,clobname clob)'; "+
// "EXCEPTION "+
// "when others then "+
// "execute immediate 'create table test(id number(10),blobname blob,clobname clob)'; "+
// "END;}";
CallableDBUtil dbutil = new CallableDBUtil();
try
{
dbutil.prepareCallable(proce);
dbutil.executeCallable();
// dbutil.execute(proce);
// CallableDBUtil dbutil_ = new CallableDBUtil();
// dbutil_.prepareCallable("{call tt()}");
//
// dbutil_.executeCallable();
}
catch (SQLException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
// dbutil.prepareCallable(proce);
// try
// {
// dbutil.executeCallable();
// }
// catch (SQLException e)
// {
// // TODO Auto-generated catch block
// e.printStackTrace();
// }
}
// @Test
// public void testBlobWrite()
// {
//
// }
/**
* 第一种插入blob字段的方法,通用的模式
*/
@Test
public void testBlobWrite()
{
PreparedDBUtil dbUtil = new PreparedDBUtil();
try {
dbUtil.preparedInsert( "insert into test(id,blobname) values(?,?)");
dbUtil.setString(1, DBUtil.getNextStringPrimaryKey("test"));
dbUtil.setBlob(2, new java.io.File("d:/dominspector.rar"));//直接将文件存储到大字段中
dbUtil.executePrepared();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
finally
{
}
}
/**
* 针对oracle Blob字段的插入操作
*/
@Test
public 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:/dominspector.rar"));
}
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;
}
}
/**
* 大字段的读取
*/
@Test
public 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("e:/dominspector.rar"));//将blob字段的值转换为文件
// Blob blob = dbUtil.getBlob(i, "blobname");//获取blob字段的值到blob变量中。
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
finally
{
}
}
/**
* clob字段的写入
*/
@Test
public void testClobWrite()
{
PreparedDBUtil dbUtil = new PreparedDBUtil();
try {
dbUtil.preparedInsert( "insert into test(id,clobname) values(?,?)");
dbUtil.setString(1, DBUtil.getNextStringPrimaryKey("test"));
dbUtil.setClob(2,"clobvalue");//直接将字符串存储到clob字段中
dbUtil.executePrepared();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
finally
{
}
}
/**
* 针对oracle Clob字段的插入操作
*/
@Test
public 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字段的读取
*/
@Test
public 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 void main(String[] args)
{
System.out.print("start.........");
DBUtil.debugMemory();
for(int i = 0; i < 1; i ++)
{
testBlobWrite();
// testBigBlobWrite();
// testClobWrite();
// testBigClobWrite();
}
// testBlobWrite();
// testBigBlobWrite();
DBUtil.debugMemory();
testBlobRead();
// testClobRead();
System.out.print("end.........");
DBUtil.debugMemory();
}
}