`

简单易行:Spring中操作LOB字段案例

阅读更多

 

Spring提供了org.springframework.jdbc.core.JdbcTemplate模板类,封装了一些sql常用方法使代码人员更加方便操作,更是引入了回调函数凸显了对面向对象的支持。这里主要介绍一下对Blob、Clob的解决。

 

1、就像普通的类声明一样,在applicationContext.xml中定义dataSource、jdbcTemplate类:

    <bean id="jdbcTemplate"
        class="org.springframework.jdbc.core.JdbcTemplate" abstract="false"
        lazy-init="false" autowire="default" dependency-check="default">
        <property name="dataSource">
            <ref bean="dataSource" />
        </property>
    </bean>

<bean id="dataSource"
        class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        <property name="driverClassName"
            value="org.logicalcobwebs.proxool.ProxoolDriver" />
        <property name="url" value="proxool.proxpoolssh2" />
    </bean>

 

2、针对Blob、Clob定义一个lobHander(此处名为oracleLobHandler)

    <!-- 使用spring+hibernate处理大字段 -->
    <!-- 处理oracle BLOB/CLOB-->
    <bean id="nativeJdbcExtractor"
        class="org.springframework.jdbc.support.nativejdbc.SimpleNativeJdbcExtractor" />
    <bean id="oracleLobHandler"
        class="org.springframework.jdbc.support.lob.OracleLobHandler"
        lazy-init="true">
        <property name="nativeJdbcExtractor">
            <ref bean="nativeJdbcExtractor" />
        </property>
    </bean>

    <!-- 如果底层数据库是 DB2、MySQL 等非 Oracle 的其它数据库,则只要简单配置一个 DefaultLobHandler 就可以了.
        <bean id="defaultLobHandler"
        class="org.springframework.jdbc.support.lob.DefaultLobHandler"
        lazy-init="true" /> -->
对于sqlserver等不必配置。

 


3、撰写业务代码:

 

public class PostJdbcDao2 {

 

private LobHandler lobHandler;
private JdbcTemplate jdbcTemplate;

//getter、setter

...

 

 

public void addPost() {
        String sql = " INSERT INTO t_post(oid,post_text,post_attach)"
                + " VALUES(?,?,?)";
        this.getJdbcTemplate().execute(sql,
                new AbstractLobCreatingPreparedStatementCallback(lobHandler) {
                    protected void setValues(PreparedStatement ps,
                            LobCreator lobCreator) throws SQLException {
                        ps.setString(1, "123123");
                        try {
                            FileInputStream fin = null;

                            //非lob方式,如sql server
                            //lobCreator.setClobAsString(ps, 2, "setClobAsString");

                            //lob方式,如oracle db2 mysql
                            fin = new FileInputStream(new File("c:\\WFM_Ecode.log"));
                            lobCreator.setClobAsAsciiStream(ps, 2, fin, fin.available());
                            fin.close();

                            //非lob方式,如sql server
                            //lobCreator.setBlobAsBytes(ps, 3, "setBlobAsBytes sdfafasf".getBytes());

                            //lob方式,如oracle db2 mysql
                            fin = new FileInputStream(new File("C:\\tomcat5.0.28_免安装.rar"));
                            lobCreator.setBlobAsBinaryStream(ps, 3, fin, fin.available());
                            fin.close();

 


                        } catch (FileNotFoundException e) {
                            e.printStackTrace();
                        } catch (IOException e) {
                            e.printStackTrace();
                        }
                       
                       
                    }
                });
    }

 

 

public List getAttachs(String userId) {
        String sql = "SELECT oid,post_text,post_attach FROM t_post where oid =?";
        List list = null;
        list = getJdbcTemplate().query(sql, new Object[] { userId },
                new RowMapper() {
                    public Object mapRow(ResultSet rs, int rowNum)
                            throws SQLException {
                        Student stu = new Student();
                        String postId = rs.getString(1);
                        stu.setId(postId);
                        stu.setDescript(lobHandler.getClobAsString(rs,
                                "post_text"));
                        stu.setImage(lobHandler.getBlobAsBytes(rs,
                                "post_attach"));
                        return stu;
                    }
                });
        showList(list);
        return list;
    }

 

 

}

 

4、在jsp调用:

JdbcTemplate jdbcTemplate = (JdbcTemplate) WebApplicationContextUtils
                    .getWebApplicationContext(session.getServletContext())
                    .getBean("jdbcTemplate");
            LobHandler lobHandler = (LobHandler) WebApplicationContextUtils
                    .getWebApplicationContext(session.getServletContext())
                    .getBean("oracleLobHandler");

           
            PostJdbcDao2 d2 = new PostJdbcDao2();
            d2.setLobHandler(lobHandler);
            d2.setJdbcTemplate(jdbcTemplate);
            d2.addPost();

            ////List list = d2.getAttachs("123123");

 

ok,查看一下吧!

 

 

 

  • src.rar (3.9 KB)
  • 下载次数: 25
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics