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);
|
|||
|
|
}
|
|||
|
|
}
|