1. 插入方法,首先須要先插入一個空的CLOB對象,以後查詢出該條對象,並進行更新操做:java
- @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());
- }
- }
- }
@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字段,在重新更新該字段,若是沒這樣作,在更新時,若是更新數據比數據庫中的數據短時,並不能徹底更新,本人是這樣操做的
如下是代碼:sql
- @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());
- }
- }
- }
@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的轉化
- 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;
- }
- };