您的位置:首页 > 其它

关于我,关于我开设这个技术博客。 真正的开始 2012-2-22

2012-02-22 00:51 483 查看
Oracle中CLOB字段CRUD:

import java.io.IOException;
import java.io.Reader;
import java.io.Writer;
import java.sql.Clob;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import javax.sql.DataSource;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Service;

import com.comtop.top.component.common.systeminit.EnviromentInfo;
import com.comtop.top.core.base.dao.BaseDAO;
import com.comtop.top.demo.content.model.ArticleVO;

/**
* 内容DAO
*
*/
@Service
@Scope(value = "prototype")
public class ArticleDAO extends BaseDAO {

/** 日志对象 */
protected final Logger logger = LoggerFactory.getLogger(getClass());

/**
* 新增文章
*
* @param objArticleVO 文章对象
*/
public void insertArticle(final ArticleVO objArticleVO) {

StringBuffer strInsertSQL = new StringBuffer(128);
strInsertSQL.append("INSERT INTO TOP_DEMO_ARTICLE ");
strInsertSQL.append(" (ARTICLE_ID , MENU_ID , ARTICLE_TITLE , ARTICLE_CONTENT ) ");
strInsertSQL.append(" VALUES (?, ?, ?, EMPTY_CLOB()) ");

StringBuffer strUpdateSQL = new StringBuffer(128);
strUpdateSQL.append("SELECT ARTICLE_CONTENT FROM TOP_DEMO_ARTICLE ");
strUpdateSQL.append(" WHERE  ARTICLE_ID = ? ");

ResultSet objRs = null;
Connection objConn = null;
PreparedStatement objPstmt = null;
Writer objWrite = null;
Clob objClob = null;
try{
objConn = this.getConnection();
objPstmt = objConn.prepareStatement(strInsertSQL.toString(), ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
objPstmt.setString(1, objArticleVO.getArticleId());
objPstmt.setString(2, objArticleVO.getMenuId());
objPstmt.setString(3, objArticleVO.getArticleTitle());
// 执行新增
objPstmt.executeUpdate();
// 清空objPstmt的SQL语句
objPstmt.clearBatch();
closeConnection(objPstmt);
//执行写入CLOB
objPstmt = objConn.prepareStatement(strUpdateSQL.toString(), ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
objPstmt.setString(1, objArticleVO.getArticleId());
objRs = objPstmt.executeQuery();
if(objRs.next()){
objClob = objRs.getClob("ARTICLE_CONTENT");
objWrite = objClob.setCharacterStream(1);
objWrite.write(objArticleVO.getArticleContent());
objWrite.flush();
}
objClob=null;//清空objClob变量
}catch (SQLException ex) {
logger.error("SQL语句执行错误:" + ",SQL:" + strInsertSQL, ex);
} catch (IOException ei) {
logger.error("新增大字段文件时发生异常!" + strUpdateSQL, ei);
}catch(Exception e){
e.printStackTrace();
}finally {
try{
if(objWrite!=null){
objWrite.close();
}
this.closeConnection(objRs, objPstmt, objConn);
}catch(IOException e){
logger.error("关闭流对象异常!", e);
e.printStackTrace();
}
}
}

/**
* 删除文章
*
* @param id 文章ID
*/
public void deleteArticle(final String menuId) {
StringBuffer strInsertSQL = new StringBuffer(128);
strInsertSQL.append("DELETE FROM TOP_DEMO_ARTICLE WHERE  MENU_ID = ? ");

Connection objConn = null;
PreparedStatement objPstmt = null;
try {
objConn = this.getConnection();
objPstmt =
objConn.prepareStatement(strInsertSQL.toString(), ResultSet.TYPE_SCROLL_INSENSITIVE,
ResultSet.CONCUR_READ_ONLY);
objPstmt.setString(1, menuId);
objPstmt.executeUpdate();
} catch (SQLException e) {
logger.error("删除ID = " + menuId + " 的文章失败!", e);
e.printStackTrace();
}
}

/**
* 更新文章
*
* @param objArticleVO 文章对象
*/
public void updateArticle(final ArticleVO objArticleVO) {

StringBuffer strUpdateSQL = new StringBuffer(128);
strUpdateSQL.append("UPDATE TOP_DEMO_ARTICLE ");
strUpdateSQL.append(" SET ARTICLE_CONTENT = EMPTY_CLOB() ,  ARTICLE_TITLE = ? "); //
strUpdateSQL.append(" WHERE  MENU_ID = ? ");

StringBuffer strNewUpdateSQL = new StringBuffer(128);
strNewUpdateSQL.append("SELECT ARTICLE_CONTENT FROM TOP_DEMO_ARTICLE ");
strNewUpdateSQL.append(" WHERE  MENU_ID = ?  FOR UPDATE ");

ResultSet objRs = null;
Connection objConn = null;
PreparedStatement objPstmt = null;
Writer objWrite = null;
Clob objClob = null;
try {
objConn = this.getConnection();
// 执行清空CLOB字段操作
objPstmt =
objConn.prepareStatement(strUpdateSQL.toString(), ResultSet.TYPE_SCROLL_INSENSITIVE,
ResultSet.CONCUR_READ_ONLY);
objPstmt.setString(1, objArticleVO.getArticleTitle());
objPstmt.setString(2, objArticleVO.getMenuId());
// 执行新增
objPstmt.execute();
// 清空objPstmt的SQL语句
objPstmt.clearBatch();
closeConnection(objPstmt);
// 执行更新CLOB字段操作
objPstmt =
objConn.prepareStatement(strNewUpdateSQL.toString(), ResultSet.TYPE_SCROLL_INSENSITIVE,
ResultSet.CONCUR_READ_ONLY);
objPstmt.setString(1, objArticleVO.getMenuId());
objRs = objPstmt.executeQuery();
if (objRs.next()) {
objClob = objRs.getClob("ARTICLE_CONTENT");
objWrite = objClob.setCharacterStream(1);
objWrite.write(objArticleVO.getArticleContent());
objWrite.flush();
}
objClob = null;// 清空objClob变量
} catch (SQLException ex) {
ex.printStackTrace();
logger.error("SQL语句执行错误:" + ",SQL:" + strUpdateSQL, ex);
} catch (IOException ei) {
ei.printStackTrace();
logger.error("新增大字段文件时发生异常!" + strNewUpdateSQL, ei);
} finally {
try {
if (objWrite != null) {
objWrite.close();
}
this.closeConnection(objRs, objPstmt, objConn);
} catch (IOException e) {
logger.error("关闭流对象异常!", e);
e.printStackTrace();
}
}
}

/**
*
* @param menuId 菜单ID
* @return 文章对象
*/
public ArticleVO querySingleArticle(String menuId){

StringBuffer strSelectSQL = new StringBuffer(128);
strSelectSQL.append(" SELECT * FROM TOP_DEMO_ARTICLE WHERE MENU_ID=? FOR UPDATE ");

ResultSet objRs = null;
Connection objConn = null;
PreparedStatement objPstmt = null;
Reader objReader = null;
Clob objClob = null;
ArticleVO objArticleVO = null;
try {
objConn = this.getConnection();
objPstmt =
objConn.prepareStatement(strSelectSQL.toString(), ResultSet.TYPE_SCROLL_INSENSITIVE,
ResultSet.CONCUR_READ_ONLY);
objPstmt.setString(1, menuId);
objRs = objPstmt.executeQuery();
while (objRs.next()) {
objArticleVO = new ArticleVO();
objArticleVO.setArticleId(objRs.getString("ARTICLE_ID"));
objArticleVO.setMenuId(objRs.getString("MENU_ID"));
objArticleVO.setArticleTitle(objRs.getString("ARTICLE_TITLE"));
objArticleVO.setUpdateTime(objRs.getTimestamp("UPDATE_TIME"));
objClob = objRs.getClob("ARTICLE_CONTENT");
objReader = objClob.getCharacterStream();
char[] cContent = new char[(int) objClob.length()];
String strContext = "";
while (objReader.read(cContent) != -1) {
strContext += String.valueOf(cContent);
}
objArticleVO.setArticleContent(strContext);
}
} catch (SQLException ex) {
logger.error("SQL语句执行错误:" + ",SQL:" + strSelectSQL, ex);
} catch (IOException ei) {
logger.error("新增大字段文件时发生异常!" + strSelectSQL, ei);
}catch(Exception e){
e.printStackTrace();
} finally {
try {
if (objReader != null) {
objReader.close();
}
this.closeConnection(objRs, objPstmt, objConn);
} catch (IOException e) {
logger.error("关闭流对象异常!", e);
e.printStackTrace();
}
}

return objArticleVO;
}

/**
* 查询文章对象集合
*
* @return 文章对象集合
*/
public List<ArticleVO> queryArticleList(String menuId) {
//    	return myBatisDAO.queryList("demo.article.queryArticleList", menuId);

StringBuffer strSelectSQL = new StringBuffer(128);
strSelectSQL.append(" SELECT * FORM TOP_DEMO_ARTICLE ");

ResultSet objRs = null;
Connection objConn = null;
PreparedStatement objPstmt = null;
Reader objReader = null;
Clob objClob = null;
List<ArticleVO> lstArticleVO = new ArrayList<ArticleVO>(10);
try {
objConn = this.getConnection();
objPstmt =
objConn.prepareStatement(strSelectSQL.toString(), ResultSet.TYPE_SCROLL_INSENSITIVE,
ResultSet.CONCUR_READ_ONLY);
objRs = objPstmt.executeQuery();
ArticleVO objArticleVO = null;
while (objRs.next()) {
objArticleVO = new ArticleVO();
objArticleVO.setArticleId(objRs.getString("ARTICLE_ID"));
objArticleVO.setMenuId(objRs.getString("MENU_ID"));
objArticleVO.setArticleTitle(objRs.getString("ARTICLE_TITLE"));
objArticleVO.setUpdateTime(objRs.getTimestamp("UPDATE_TIME"));
objClob = objRs.getClob("ARTICLE_CONTENT");
objReader = objClob.getCharacterStream();
char[] cContent = new char[(int) objClob.length()];
String strContext = "";
while (objReader.read(cContent) != -1) {
strContext += String.valueOf(cContent);
}
objArticleVO.setArticleContent(strContext);
}
} catch (SQLException ex) {
logger.error("SQL语句执行错误:" + ",SQL:" + strSelectSQL, ex);
} catch (IOException ei) {
logger.error("新增大字段文件时发生异常!" + strSelectSQL, ei);
} finally {
try {
if (objReader != null) {
objReader.close();
}
this.closeConnection(objRs, objPstmt, objConn);
} catch (IOException e) {
logger.error("关闭流对象异常!", e);
e.printStackTrace();
}
}

return lstArticleVO;
}

/**
* 获取连接
*
* @return conn
*/
private Connection getConnection() {
Connection conn = null;
try {
conn = ((DataSource) EnviromentInfo.getWebApplicationContext().getBean("dataSource")).getConnection();
} catch (SQLException e) {
logger.error("获取数据库连接失败!", e);
e.printStackTrace();
}
return conn;
}

/**
* 释放DB资源
*
* @param rs ResultSet 结果集
* @param stat Statement 语句对象
* @param conn Connection DB联接
*/
private final void closeConnection(ResultSet rs, PreparedStatement stat, Connection conn) {
this.closeConnection(rs);
this.closeConnection(stat);
this.closeConnection(conn);
}

/**
* 释放DB资源
*
* @param rs ResultSet 结果集
*/
private final void closeConnection(ResultSet rs) {
if (rs != null) {
try {
rs.close();
} catch (SQLException ex) {
logger.warn("数据库ResultSet关闭异常.", ex);
}
}
}

/**
* 释放DB资源
*
* @param stat Statement 语句对象
*/
private final void closeConnection(PreparedStatement stat) {
if (stat != null) {
try {
stat.close();
} catch (SQLException ex) {
logger.warn("数据库Statement关闭异常.", ex);
}
}
}

/**
* 释放DB资源
*
* @param conn Connection DB联接
*/
private final void closeConnection(Connection conn) {
if (conn != null) {
try {
conn.close();
} catch (SQLException ex) {
logger.error("数据库Connection关闭异常.", ex);
}
}
}
}

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: