JdbcDaoSupport 操作CLOB、BLOB数据字段

本文介绍了如何在Spring JDBC中使用JdbcDaoSupport处理CLOB和BLOB数据字段。通过配置DefaultLobHandler并利用AbstractLobCreatingPreparedStatementCallback及LobCreator,实现了单条和批量插入包含CLOB和BLOB字段的数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一,首先在配置文件中注入

 <bean id="lobHandler" class="org.springframework.jdbc.support.lob.DefaultLobHandler" lazy-init="true"></bean>

 

 

二,直接使用getJdbcTemplate().execute来使用Lobcreator

@Repository

public class ArticleDAO extends BaseDAO{

    @Resource

    private LobHandler lobHandler;

 

    /**

     * 对去重后数据进行持久化

     * @param map

     */

    @Transactional(propagation=Propagation.REQUIRED)

    public void insertArticls(final NewsArticle atc) {

        

        String showSql = "insert into tb_temp(tbid,title,publishTime,fromUrl,source,author,crawled_from,imgs,videos,content) " +

                " values(?,?,?,?,?,?,?,?,?,?)";

   

        

        getJdbcTemplate().execute(showSql, new AbstractLobCreatingPreparedStatementCallback(lobHandler) {

            

            @Override

            protected void setValues(PreparedStatement ps, LobCreator creator)

                    throws SQLException, DataAccessException {

                ps.setLong(1, getTableId("SEQ_TB_TEMP_TBID"));

                ps.setString(2, atc.getTitle());

                ps.setString(3, atc.getPublishTime());

                ps.setString(4, atc.getFromUrl());

                ps.setString(5, atc.getSource());

                ps.setString(6, atc.getAuthor());

                ps.setString(7, atc.getCrawled_from());

                ps.setString(8, atc.getImgs());

                ps.setString(9, atc.getVideos());

                creator.setClobAsString(ps, 10, atc.getContent()); //放在最后

                

            }

        });

        

          }

}

 

 

三,如果是批量操作,使用LobHandler来得到LobCreator

public class ArticleDAO extends BaseDAO{

    @Resource

    private LobHandler lobHandler;

 

    /**

     * 对去重后数据进行持久化

     * @param map

     */

    @Transactional(propagation=Propagation.REQUIRED)

    public void insertArticls(final Vector<NewsArticle> atc) {

        

        final String showSql = "insert into tb_temp(tbid,title,publishTime,fromUrl,source,author,crawled_from,imgs,videos,content) " +

                " values(?,?,?,?,?,?,?,?,?,?)";

        BatchPreparedStatementSetter setter = new BatchPreparedStatementSetter() {

            public void setValues(PreparedStatement ps, int i)

                    throws SQLException {

                    LobCreator creator = lobHandler.getLobCreator();

                    ps.setLong(1, getTableId("SEQ_TB_TEMP_TBID"));

                    ps.setString(2, atc.get(i).getTitle());

                    ps.setString(3, atc.get(i).getPublishTime());

                    ps.setString(4, atc.get(i).getFromUrl());

                    ps.setString(5, atc.get(i).getSource());

                    ps.setString(6, atc.get(i).getAuthor());

                    ps.setString(7, atc.get(i).getCrawled_from());

                    ps.setString(8, atc.get(i).getImgs());

                    ps.setString(9, atc.get(i).getVideos());

                    creator.setClobAsString(ps, 10, atc.get(i).getContent());

            }

            public int getBatchSize() {

                return atc.size();

            }

        };

        

        this.getJdbcTemplate().batchUpdate(showSql, setter);

    }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值