package com.bsoft.util;
import java.io.BufferedReader;
import java.io.Reader;
import java.io.StringReader;
import java.sql.Blob;
import java.sql.Clob;
import java.sql.SQLException;
import javax.sql.rowset.serial.SerialBlob;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.dom4j.Document;
import org.xml.sax.InputSource;
/**
*
* 转换工具类
*
* 2018-03-26
* Clob和String互转
* Blob和String互转
* String和Document互转
*/
public class ToolsUtils {
private static final Log logger = LogFactory.getLog(ToolsUtils.class);
/**
*
* blob大字段转为String
* @param o
* @return str
*
*/
public static String BlobToString(Object o) {
String str = "";
byte[] inbyte = null;
if(o instanceof Blob){
Blob blob = (Blob) o;
if ( null != blob ) {
try {
inbyte = blob.getBytes(1, (int) blob.length());
} catch (SQLException e) {
logger.error(e.getMessage(),e);
}
}
str = new String (inbyte);
}
return str;
}
/**
*
* Clob大字段转为String
* @param o
* @return str
*
*/
public static String ClobToString(Object o) {
String content = "";
try{
//object为从数据库中取出的CLOB类型的字段
Clob clob = (Clob) o;
content = clob.getSubString((long)1,(int)clob.length());
} catch (SQLException e) {
logger.error(e.getMessage(),e);
}
return content;
}
/**
*
* String转为blob大字段
* @param str
* @return blob
*
*/
public static Blob stringToBlob(String blobStr) {
Blob b = null;
try {
b = new SerialBlob(blobStr.getBytes("UTF-8"));
} catch (Exception e) {
logger.error(e.getMessage(),e);
}
return b;
}
// Clob类型转换成String类型
public static String clobToString(final Clob object) {
if (object == null) {
return null;
}
Reader is = null;
try {
is = object.getCharacterStream();
} catch (Exception e) {
logger.error(e.getMessage(),e);
}
BufferedReader br = new BufferedReader(is);
String str = null;
try {
str = br.readLine(); // 读取第一行
} catch (Exception e) {
logger.error(e.getMessage(),e);
}
StringBuffer sb = new StringBuffer();
while (str != null) { // 如果没有到达流的末尾,则继续读取下一行
sb.append(str);
try {
str = br.readLine();
} catch (Exception e) {
e.printStackTrace();
}
}
return sb.toString();
}
// String类型转换成Clob类型
public static Clob stringToClob(final String string) {
if(null == string || string.trim().length() == 0){
return null;
}
java.sql.Clob c = null;
try {
c = new javax.sql.rowset.serial.SerialClob(string.toCharArray());
} catch (Exception e) {
logger.error(e.getMessage(),e);
}
return c;
}
/***
* 将Document对象转换成String
* @param document
* @return
*/
public String xmlToString(Document document) {
return document.asXML();
}
/**
* 将String对象转换成Document
* @param document
* @return
*/
public static Document stringToXml(String xmlStr) {
// 字符串转XML
StringReader sr = new StringReader(xmlStr);
InputSource is = new InputSource(sr);
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder;
Document doc = null;
try {
builder = factory.newDocumentBuilder();
doc = (Document) builder.parse(is);
} catch (Exception e) {
logger.error(e.getMessage(),e);
}
return doc;
}
public static void main(String[] args) {
String blobStr = "<?xml version='1.0' encoding='UTF-8'?>"
+ "<dic><area code='110101' name='X1区' />"
+ "<dic><area code='110102' name='X2区' />"
+"</dic>";
System.out.println( stringToXml(blobStr) );
}
}
备注:hibernate配置实体类entity.hbm.xml
<property name="content2" type="java.sql.Clob" ><column name="content2" ></column></property>
<property name="content" type="java.sql.Blob" ><column name="content" ></column></property>