您的位置:首页 > 其它

CLOB字段的插入以及更新操作 .

2011-10-28 15:57 363 查看
1.  插入方法,首先需要先插入一个空的CLOB对象,之后查询出该条对象,并进行更新操作:

view plaincopy to clipboardprint?
01.@Override
02.public void add(Object obj) throws DAOException {
03.
04.    Connection conn = null;
05.    PreparedStatement pst = null;
06.    try {
07.        conn = getJdbcTemplate().getDataSource().getConnection();
08.        conn.setAutoCommit(false);
09.        //获得一个主键
10.        String seqSql ="select cms.SEQ_TERMSERVICE_ID.nextval from dual";
11.        Long id = this.getJdbcTemplate().queryForLong(seqSql);
12.        //执行插入操作
13.        Statement st = conn.createStatement();
14.        String sql1 = "insert into cms.s_termservice(TERMSERVICE_ID,CREATETIME,UPDATETIME,CONTENT) values(" + id + ",sysdate,sysdate,empty_clob())";
15.        st.executeUpdate(sql1);
16.        //从数据库中重新获取CLOB对象写入数据
17.        String sql2 = "select CONTENT from cms.s_termservice where TERMSERVICE_ID=" + id + " for update";
18.        //锁定数据行进行更新,注意“for update”语句
19.        ResultSet rs = st.executeQuery(sql2);
20.        while(rs.next()) {
21.            CLOB clob = (CLOB)rs.getClob("CONTENT");
22.            clob.putString(1, ((TermService)obj).getContent());
23.            String sql3 = "update cms.s_termservice set CONTENT=? where TERMSERVICE_ID=" + id;
24.            pst = conn.prepareStatement(sql3);
25.            pst.setClob(1, clob);
26.            pst.execute();
27.        }
28.           //最后一步自己提交
29.           conn.commit();
30.           conn.setAutoCommit(true);
31.    } catch (SQLException e) {
32.        logger.error("in TermserviceDaoImpl,add fail, e is " + e.getMessage());
33.    } finally {
34.           try {
35.            if(conn != null) {
36.                   conn.close();
37.            }
38.            if(pst != null) {
39.                pst.close();
40.            }
41.           } catch (SQLException e1) {
42.            logger.error("in TermserviceDaoImpl,add fail, e1 is " + e1.getMessage());
43.           }
44.    }
45.}
@Override
public void add(Object obj) throws DAOException {

Connection conn = null;
PreparedStatement pst = null;
try {
conn = getJdbcTemplate().getDataSource().getConnection();
conn.setAutoCommit(false);
//获得一个主键
String seqSql ="select cms.SEQ_TERMSERVICE_ID.nextval from dual";
Long id = this.getJdbcTemplate().queryForLong(seqSql);
//执行插入操作
Statement st = conn.createStatement();
String sql1 = "insert into cms.s_termservice(TERMSERVICE_ID,CREATETIME,UPDATETIME,CONTENT) values(" + id + ",sysdate,sysdate,empty_clob())";
st.executeUpdate(sql1);
//从数据库中重新获取CLOB对象写入数据
String sql2 = "select CONTENT from cms.s_termservice where TERMSERVICE_ID=" + id + " for update";
//锁定数据行进行更新,注意“for update”语句
ResultSet rs = st.executeQuery(sql2);
while(rs.next()) {
CLOB clob = (CLOB)rs.getClob("CONTENT");
clob.putString(1, ((TermService)obj).getContent());
String sql3 = "update cms.s_termservice set CONTENT=? where TERMSERVICE_ID=" + id;
pst = conn.prepareStatement(sql3);
pst.setClob(1, clob);
pst.execute();
}
//最后一步自己提交
conn.commit();
conn.setAutoCommit(true);
} catch (SQLException e) {
logger.error("in TermserviceDaoImpl,add fail, e is " + e.getMessage());
} finally {
try {
if(conn != null) {
conn.close();
}
if(pst != null) {
pst.close();
}
} catch (SQLException e1) {
logger.error("in TermserviceDaoImpl,add fail, e1 is " + e1.getMessage());
}
}
}
2. 更新操作,我个人是先置空CLOB字段,在从新更新该字段,如果没这样做,在更新时,如果更新数据比数据库中的数据短时,并不能完全更新,本人是这样操作的

以下是代码:

view plaincopy to clipboardprint?
01.@Override
02.public void update(Object obj) throws DAOException {
03.
04.    Connection conn = null;
05.    PreparedStatement pst = null;
06.    try {
07.        conn = getJdbcTemplate().getDataSource().getConnection();
08.        conn.setAutoCommit(false);
09.        Statement st = conn.createStatement();
10.        int id = ((TermService)obj).getTermserviceId();
11.        //从数据库中重新获取CLOB对象写入数据
12.        String sql1 = "update cms.s_termservice s set s.CONTENT=' ' where TERMSERVICE_ID=" + id; //这边需要设置一个空的字段,后面就不会出现空指针
13.        st.execute(sql1);
14.        String sql2 = "select CONTENT from cms.s_termservice s where s.TERMSERVICE_ID=" + id;
15.        //锁定数据行进行更新,注意“for update”语句
16.        ResultSet rs = st.executeQuery(sql2);
17.        while(rs.next()) {
18.            CLOB clob = (CLOB)rs.getClob("CONTENT");
19.            if(clob != null) {
20.                clob.putString(1, ((TermService)obj).getContent());
21.                String sql3 = "update cms.s_termservice set CONTENT=?,UPDATETIME=sysdate where TERMSERVICE_ID=" + id;
22.                pst = conn.prepareStatement(sql3);
23.                pst.setClob(1, clob);
24.                pst.execute();
25.            }
26.        }
27.           //最后一步自己提交
28.           conn.commit();
29.           conn.setAutoCommit(true);
30.    } catch (SQLException e) {
31.        logger.error("in TermserviceDaoImpl,add fail, e is " + e.getMessage());
32.    } finally {
33.           try {
34.            if(conn != null) {
35.                   conn.close();
36.            }
37.            if(pst != null) {
38.                pst.close();
39.            }
40.           } catch (SQLException e1) {
41.            logger.error("in TermserviceDaoImpl,add fail, e1 is " + e1.getMessage());
42.           }
43.    }
44.}
@Override
public void update(Object obj) throws DAOException {

Connection conn = null;
PreparedStatement pst = null;
try {
conn = getJdbcTemplate().getDataSource().getConnection();
conn.setAutoCommit(false);
Statement st = conn.createStatement();
int id = ((TermService)obj).getTermserviceId();
//从数据库中重新获取CLOB对象写入数据
String sql1 = "update cms.s_termservice s set s.CONTENT=' ' where TERMSERVICE_ID=" + id; //这边需要设置一个空的字段,后面就不会出现空指针
st.execute(sql1);
String sql2 = "select CONTENT from cms.s_termservice s where s.TERMSERVICE_ID=" + id;
//锁定数据行进行更新,注意“for update”语句
ResultSet rs = st.executeQuery(sql2);
while(rs.next()) {
CLOB clob = (CLOB)rs.getClob("CONTENT");
if(clob != null) {
clob.putString(1, ((TermService)obj).getContent());
String sql3 = "update cms.s_termservice set CONTENT=?,UPDATETIME=sysdate where TERMSERVICE_ID=" + id;
pst = conn.prepareStatement(sql3);
pst.setClob(1, clob);
pst.execute();
}
}
//最后一步自己提交
conn.commit();
conn.setAutoCommit(true);
} catch (SQLException e) {
logger.error("in TermserviceDaoImpl,add fail, e is " + e.getMessage());
} finally {
try {
if(conn != null) {
conn.close();
}
if(pst != null) {
pst.close();
}
} catch (SQLException e1) {
logger.error("in TermserviceDaoImpl,add fail, e1 is " + e1.getMessage());
}
}
}
3.  获取CLOB,并进行STRING的转化

view plaincopy to clipboardprint?
01.private RowMapper showTSMapper = new RowMapper() {
02.    public Object mapRow(ResultSet rs, int rowNum) throws SQLException {
03.        TermService termService = new TermService();
04.        termService.setTermserviceId(rs.getInt("TERMSERVICE_ID"));
05.        termService.setCreatetime(rs.getDate("CREATETIME"));
06.        termService.setUpdatetime(rs.getDate("UPDATETIME"));
07.        StringBuffer sb = new StringBuffer();
08.           try {
09.            CLOB clob = (CLOB)rs.getClob("CONTENT");
10.            if(clob != null) {
11.                    Reader is = clob.getCharacterStream();
12.                    BufferedReader br = new BufferedReader(is);
13.                    String s = br.readLine();
14.                    while (s != null) {
15.                        sb.append(s);
16.                        s = br.readLine();
17.                    }
18.            }
19.            if(sb.length()>10) {
20.                termService.setContent(sb.substring(0,10) + ".......");
21.            } else {
22.                termService.setContent(sb.toString());
23.            }
24.        } catch (IOException e) {
25.            logger.error("in TermserviceDaoImpl.showTSMapper fail, e is " + e.getMessage());
26.        }
27.        return termService;
28.    }
29.};
30.
31.private RowMapper modifyMapper = new RowMapper() {
32.    public Object mapRow(ResultSet rs, int rowNum) throws SQLException {
33.        TermService termService = new TermService();
34.        termService.setTermserviceId(rs.getInt("TERMSERVICE_ID"));
35.        termService.setCreatetime(rs.getDate("CREATETIME"));
36.        termService.setUpdatetime(rs.getDate("UPDATETIME"));
37.        StringBuffer sb = new StringBuffer();
38.           try {
39.            CLOB clob = (CLOB)rs.getClob("CONTENT");
40.            if(clob != null) {
41.                    Reader is = clob.getCharacterStream();
42.                    BufferedReader br = new BufferedReader(is);
43.                    String s = br.readLine();
44.                    while (s != null) {
45.                        sb.append(s);
46.                        s = br.readLine();
47.                    }
48.            }
49.            termService.setContent(sb.toString());
50.        } catch (IOException e) {
51.            logger.error("in TermserviceDaoImpl.tsMapper fail, e is " + e.getMessage());
52.        }
53.        return termService;
54.    }
55.};
private RowMapper showTSMapper = new RowMapper() {
public Object mapRow(ResultSet rs, int rowNum) throws SQLException {
TermService termService = new TermService();
termService.setTermserviceId(rs.getInt("TERMSERVICE_ID"));
termService.setCreatetime(rs.getDate("CREATETIME"));
termService.setUpdatetime(rs.getDate("UPDATETIME"));
StringBuffer sb = new StringBuffer();
try {
CLOB clob = (CLOB)rs.getClob("CONTENT");
if(clob != null) {
Reader is = clob.getCharacterStream();
BufferedReader br = new BufferedReader(is);
String s = br.readLine();
while (s != null) {
sb.append(s);
s = br.readLine();
}
}
if(sb.length()>10) {
termService.setContent(sb.substring(0,10) + ".......");
} else {
termService.setContent(sb.toString());
}
} catch (IOException e) {
logger.error("in TermserviceDaoImpl.showTSMapper fail, e is " + e.getMessage());
}
return termService;
}
};

private RowMapper modifyMapper = new RowMapper() {
public Object mapRow(ResultSet rs, int rowNum) throws SQLException {
TermService termService = new TermService();
termService.setTermserviceId(rs.getInt("TERMSERVICE_ID"));
termService.setCreatetime(rs.getDate("CREATETIME"));
termService.setUpdatetime(rs.getDate("UPDATETIME"));
StringBuffer sb = new StringBuffer();
try {
CLOB clob = (CLOB)rs.getClob("CONTENT");
if(clob != null) {
Reader is = clob.getCharacterStream();
BufferedReader br = new BufferedReader(is);
String s = br.readLine();
while (s != null) {
sb.append(s);
s = br.readLine();
}
}
termService.setContent(sb.toString());
} catch (IOException e) {
logger.error("in TermserviceDaoImpl.tsMapper fail, e is " + e.getMessage());
}
return termService;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: