225 lines
6.0 KiB
Java
225 lines
6.0 KiB
Java
package com.wb.common;
|
||
|
||
import java.io.ByteArrayInputStream;
|
||
import java.io.ByteArrayOutputStream;
|
||
import java.io.InputStream;
|
||
import java.sql.Connection;
|
||
import java.sql.PreparedStatement;
|
||
import java.sql.ResultSet;
|
||
import java.util.UUID;
|
||
|
||
import javax.servlet.http.HttpServletRequest;
|
||
|
||
import org.apache.commons.io.IOUtils;
|
||
|
||
import com.wb.util.WebUtil;
|
||
import org.apache.logging.log4j.core.util.UuidUtil;
|
||
|
||
/**
|
||
* 存储和维护较大的文本或二进制数据至数据库。
|
||
* 如果数据较小(长度小于255字节)可使用{@link Value}类。
|
||
* 如果数据较小且对性能有高要求可使用{@link Var}类。
|
||
*
|
||
* @see Value
|
||
* @see Var
|
||
*/
|
||
public class Resource {
|
||
/**
|
||
* 获取当前用户指定编号的文本资源。如果资源不存在将返回defaultValue。
|
||
*
|
||
* @param request 当前用户请求的request对象。
|
||
* @param id 资源id编号。
|
||
* @param defaultValue 默认值。
|
||
* @return 获取的文本。
|
||
*/
|
||
public static String getString(HttpServletRequest request, String id,
|
||
String defaultValue) {
|
||
return getString(WebUtil.getIdWithUser(request, id), defaultValue);
|
||
}
|
||
|
||
/**
|
||
* 获取指定编号的文本资源。如果资源不存在将返回defaultValue。
|
||
*
|
||
* @param id 资源id编号。
|
||
* @param defaultValue 默认值。
|
||
* @return 获取的文本。
|
||
*/
|
||
public static String getString(String id, String defaultValue) {
|
||
try {
|
||
byte[] bytes = getBytes(id, null);
|
||
if (bytes == null)
|
||
return defaultValue;
|
||
else
|
||
return new String(bytes, "utf-8");
|
||
} catch (Throwable e) {
|
||
throw new RuntimeException(e);
|
||
}
|
||
}
|
||
|
||
/**
|
||
* 获取指定编号的文本资源。如果资源不存在将返回null。
|
||
*
|
||
* @param id 资源id编号。
|
||
* @return 获取的文本。
|
||
*/
|
||
public static String getString(String id) {
|
||
return getString(id, null);
|
||
}
|
||
|
||
/**
|
||
* 获取当前用户指定编号的字节数组资源。如果资源不存在将返回defaultValue。
|
||
*
|
||
* @param request 当前用户请求的request对象。
|
||
* @param id 资源id编号。
|
||
* @param defaultValue 默认值。
|
||
* @return 获取的字节数组。
|
||
*/
|
||
public static byte[] getBytes(HttpServletRequest request, String id,
|
||
byte[] defaultValue) {
|
||
return getBytes(WebUtil.getIdWithUser(request, id), defaultValue);
|
||
}
|
||
|
||
/**
|
||
* 获取指定编号的字节数组资源。如果资源不存在将返回defaultValue。
|
||
*
|
||
* @param id 资源id编号。
|
||
* @param defaultValue 默认值。
|
||
* @return 获取的字节数组。
|
||
*/
|
||
public static byte[] getBytes(String id, byte[] defaultValue) {
|
||
Connection conn = null;
|
||
PreparedStatement st = null;
|
||
ResultSet rs = null;
|
||
|
||
try {
|
||
conn = com.wb.util.DbUtil.getConnection();
|
||
st = conn
|
||
.prepareStatement("select RES_CONTENT from WB_RESOURCE where RES_ID=?");
|
||
st.setString(1, id);
|
||
rs = st.executeQuery();
|
||
if (rs.next()) {
|
||
ByteArrayOutputStream os = new ByteArrayOutputStream();
|
||
InputStream is = rs.getBinaryStream(1);
|
||
if (is != null) {
|
||
try {
|
||
IOUtils.copy(is, os);
|
||
} finally {
|
||
is.close();
|
||
}
|
||
return os.toByteArray();
|
||
}
|
||
}
|
||
} catch (Throwable e) {
|
||
throw new RuntimeException(e);
|
||
} finally {
|
||
com.wb.util.DbUtil.close(rs);
|
||
com.wb.util.DbUtil.close(st);
|
||
com.wb.util.DbUtil.close(conn);
|
||
}
|
||
return defaultValue;
|
||
}
|
||
|
||
/**
|
||
*
|
||
* 把字符串作为资源存储到特定的数据库表中,并在当前用户下指定id编号标识。
|
||
* 如果值为null将删除id指定的值。
|
||
* @param request 当前用户请求的request对象。
|
||
* @param id 资源id编号。
|
||
* @param data 存储的字符串。
|
||
*/
|
||
public static void set(HttpServletRequest request, String id, String data) {
|
||
set(WebUtil.getIdWithUser(request, id), data);
|
||
}
|
||
|
||
/**
|
||
* 把字符串作为资源存储到特定的数据库表中,并以指定id编号标识。
|
||
* 如果值为null将删除id指定的值。
|
||
*
|
||
* @param id 资源id编号。
|
||
* @param data 存储的字符串。
|
||
*/
|
||
public static void set(String id, String data) {
|
||
try {
|
||
byte[] bytes;
|
||
|
||
if (data == null)
|
||
bytes = null;
|
||
else
|
||
bytes = data.getBytes("utf-8");
|
||
set(id, bytes);
|
||
} catch (Throwable e) {
|
||
throw new RuntimeException(e);
|
||
}
|
||
}
|
||
|
||
/**
|
||
* 删除指定编号的资源。
|
||
*
|
||
* @param id 资源id编号。
|
||
*/
|
||
public static void remove(String id) {
|
||
set(id, (byte[]) null);
|
||
}
|
||
|
||
/**
|
||
* 删除当前用户指定编号的资源。
|
||
*
|
||
* @param request 请求对象。
|
||
* @param id 资源id编号。
|
||
*/
|
||
public static void remove(HttpServletRequest request, String id) {
|
||
set(request, id, (byte[]) null);
|
||
}
|
||
|
||
/**
|
||
* 把字节数组作为资源存储到特定的数据库表中,并以指定id编号标识。
|
||
* 如果值为null将删除id指定的值。
|
||
* @param id 资源id编号。
|
||
* @param data 字节数组值。
|
||
*/
|
||
public static void set(String id, byte[] data) {
|
||
Connection conn = null;
|
||
PreparedStatement st = null;
|
||
boolean hasData = data != null;
|
||
|
||
try {
|
||
conn = com.wb.util.DbUtil.getConnection();
|
||
if (hasData)
|
||
conn.setAutoCommit(false);
|
||
st = conn
|
||
.prepareStatement("delete from WB_RESOURCE where RES_ID=?");
|
||
st.setString(1, id);
|
||
st.executeUpdate();
|
||
com.wb.util.DbUtil.close(st);
|
||
st = null;
|
||
if (hasData) {
|
||
st = conn
|
||
.prepareStatement("insert into WB_RESOURCE values(?,?,?)");
|
||
st.setString(1, id);
|
||
st.setBinaryStream(2, new ByteArrayInputStream(data),
|
||
data.length);
|
||
st.setString(3, UUID.randomUUID().toString().replaceAll("-",""));
|
||
st.executeUpdate();
|
||
conn.commit();
|
||
}
|
||
} catch (Throwable e) {
|
||
throw new RuntimeException(e);
|
||
} finally {
|
||
com.wb.util.DbUtil.close(st);
|
||
com.wb.util.DbUtil.close(conn);
|
||
}
|
||
}
|
||
|
||
/**
|
||
*
|
||
* 把字节数组作为资源存储到特定的数据库表中,并在当前用户下指定id编号标识。
|
||
* 如果值为null将删除id指定的值。
|
||
* @param request 当前用户请求的request对象。
|
||
* @param id 资源id编号。
|
||
* @param data 字节数组值。
|
||
*/
|
||
public static void set(HttpServletRequest request, String id, byte[] data) {
|
||
set(WebUtil.getIdWithUser(request, id), data);
|
||
}
|
||
}
|