书签 分享 收藏 举报 版权申诉 / 21
上传文档赚钱

类型《Spring编程技术与应用》课件4.ppt

  • 上传人(卖家):momomo
  • 文档编号:5818515
  • 上传时间:2023-05-11
  • 格式:PPT
  • 页数:21
  • 大小:172KB
  • 【下载声明】
    1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
    2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
    3. 本页资料《《Spring编程技术与应用》课件4.ppt》由用户(momomo)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
    4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
    5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
    配套讲稿:

    如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。

    特殊限制:

    部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。

    关 键  词:
    Spring编程技术与应用 Spring 编程 技术 应用 课件
    资源描述:

    1、4.1.1 连接数据库Spring的的JDBC抽象框架提供了一系列接口和类实现对数据源的连接。抽象框架提供了一系列接口和类实现对数据源的连接。DataSourceUtils类:提供从类:提供从JNDI获取连接获取连接.p 方法方法getDataSourceFromJndi用以针对那些不使用用以针对那些不使用BeanFactory或者或者ApplicationContext的应用。的应用。p 通过通过DataSourceUtils.getConnection(DataSource)可取得可取得JDBC连接。连接。SmartDataSource接口:提供与关系数据库的连接,它继承接口:提供与关系数

    2、据库的连接,它继承javax.sql.DataSource接口,它在数据库操作后可智能决定是否需要接口,它在数据库操作后可智能决定是否需要关闭连接。对于需要重用一个连接的应用可提高效率。关闭连接。对于需要重用一个连接的应用可提高效率。DriverManagerDataSource类:实现类:实现SmartDataSource接口,通接口,通过过bean的属性配置完成的属性配置完成JDBC驱动,并每次都返回一个新的连接。驱动,并每次都返回一个新的连接。(1)连接Access数据库的配置(2)基于属性文件连接Mysql数据库的配置 4.1.2 数据源的注入package chapter4;impo

    3、rt org.springframework.jdbc.core.JdbcTemplate;public class UserDaoImpl implements UserDao private JdbcTemplate jdbcTemplate;public JdbcTemplate getJdbcTemplate()return jdbcTemplate;public void setJdbcTemplate(JdbcTemplate jdbcTemplate)this.jdbcTemplate=jdbcTemplate;/其他业务逻辑方法其他业务逻辑方法3.配置文件(beans.xml)

    4、bean id=dataSource .数据源数据源 .编程中也可以采用非注入方式来设置数据源管理对象编程中也可以采用非注入方式来设置数据源管理对象以下程序中直接通过对象的以下程序中直接通过对象的setter方法实现数据源的设置。方法实现数据源的设置。DriverManagerDataSource dataSource=new DriverManagerDataSource();dataSource.setDriverClassName(sun.jdbc.odbc.JdbcOdbcDriver);dataSource.setUrl(jdbc:odbc:xx);/假设假设xx为为ODBC数据源数

    5、据源 UserDao userDAO=new UserDao();userDAO.setJdbcTemplate(new JdbcTemplate(dataSource);4.1.3 使用JdbcTemplate查询数据库1使用使用queryForList方法将多行记录存储到方法将多行记录存储到列表中列表中String sql=SELECT*FROM 栏目栏目;ListMap x=jdbcTemplate.queryForList(sql);要访问第要访问第1行的栏目标题可以用行的栏目标题可以用x.get(0).get(title)。2.通过query方法执行SQL语句,对多行查询结果进行对象

    6、封装-(1)使用RowMapper数据记录映射接口通过回调通过回调RowMapper接口的接口的mapRow方法可处理结果集的每行。并且每行处理后方法可处理结果集的每行。并且每行处理后可返回一个对象,所有行返回的对象形成对象列表集合。可返回一个对象,所有行返回的对象形成对象列表集合。public List getAll()List rows=jdbcTemplate.query(“SELECT*FROM 栏栏目目”,new RowMapper()public Column mapRow(ResultSet rs,int rowNum)throws SQLException Column m=n

    7、ew Column();/创建栏目对象创建栏目对象 m.setTitle(rs.getString(“title”);/根据获取记录字段值设置栏根据获取记录字段值设置栏目属性目属性m.setNumber(rs.getInt(“id”);return m;/返回一行的处理结果返回一行的处理结果 );return rows;/所有行的处理结果所有行的处理结果(2)使用RowCallbackHandler数据记录回调管理器接口RowCallbackHandler接口定义的接口定义的processRow方法将对结果集的每行分别进行处方法将对结果集的每行分别进行处理,但方法无返回值。理,但方法无返回值。

    8、public static List getName(String table)String sql=select distinct name from +table;final List result=new List();/存放结果存放结果jdbcTemplate.query(sql,new RowCallbackHandler()public void processRow(ResultSet rs)throws SQLExceptionresult.add(rs.getString(name);/加入结果集加入结果集 );return result;3.返回单值结果的查询方法 有一些查

    9、询方法用来执行返回单个值。例如:有一些查询方法用来执行返回单个值。例如:queryForInt,queryForLong或者或者queryForObject。public boolean logincheck(String loginname,String pass)String sql=Select count(*)from user where loginname=+loginname+and password=+pass+;return jdbcTemplate.queryForInt(sql)0;queryForObject方法queryForObject方法将会把返回的方法将会把返回

    10、的JDBC类型转换成最后一个参数所指定的类型转换成最后一个参数所指定的Java类。如果类型转换无效,那么将会抛出类。如果类型转换无效,那么将会抛出InvalidDataAccessApiUsageException异常。如果无查询结果,会抛出异常。如果无查询结果,会抛出EmptyResultDataAccessException异常。例如:异常。例如:String name=(String)jdbcTemplate.queryForObject(SELECT name FROM USER WHERE user_id=?,new Object“123”,String.class);/带填充参数情

    11、形带填充参数情形 如果不含如果不含SQL填充参数,可以用如下形式:填充参数,可以用如下形式:String name=(String)jdbcTemplate.queryForObject(SELECT name FROM USER WHERE user_id=123,String.class);实际上,实际上,queryForInt(sql)可用可用queryForObject(sql,Integer.class)来代替。来代替。4.1.4 使用JdbcTemplate更新数据库1.完整完整SQL命令串的执行处理命令串的执行处理如果如果SQL拼写完整,则可采用只有一个拼写完整,则可采用只有一个

    12、SQL命命令串参数的令串参数的update方法或方法或execute方法。方法。String sql=INSERT INTO 栏目栏目(title)+VALUES(+title1+);jdbcTemplate.execute(sql);2.带填充参数的SQL语句的执行处理(1)通过参数数组填充通过参数数组填充SQL语句中的内容语句中的内容String sql=insert into user values(?,?,?,?,10);Object params=new Object loginname,password,emailAddress,username ;jdbcTemplate.upd

    13、ate(sql,params);(2)利用PreparedStatementSetter接口处理预编译SQLpublic void addScore(final String loginname,final int s)String sql=update user set score=score+?where loginname=?;jdbcTemplate.update(sql,new PreparedStatementSetter()public void setValues(PreparedStatement ps)throws SQLException ps.setInt(1,s);p

    14、s.setString(2,loginname););4.1.5 对业务逻辑的应用测试【程序清单【程序清单4-6】文件名为】文件名为TestJDBCTemplate.java .ApplicationContext applicationContext=new ClassPathXmlApplicationContext(/beans.xml);UserDao userDAO=applicationContext.getBean(userDAO,UserDaoImpl.class);if(userDAO.register(123,xxxxxx,mary)System.out.println(a

    15、 user registered);userDAO.addScore(123,5);System.out.println(userDAO.getScore(123);4.2 数据库中大容量字节数据的读写访问4.2.1 将大容量数据写入数据库将大容量数据写入数据库Spring 定义了定义了LobCreator接口,以统一的方式操作各种数据库的接口,以统一的方式操作各种数据库的LOB类型数类型数据。据。LobCreator接口中的方法接口中的方法:l void setBlobAsBinaryStream(PreparedStatement ps,int paramIndex,InputStream

    16、 contentStream,int contentLength):通:通过流填充过流填充BLOB数据;数据;l void setBlobAsBytes(PreparedStatement ps,int paramIndex,byte content):通过二进制数据填充通过二进制数据填充BLOB数据;数据;l void setClobAsAsciiStream(PreparedStatement ps,int paramIndex,InputStream asciiStream,int contentLength):通过:通过Ascii字符流填充字符流填充CLOB数据;数据;l void s

    17、etClobAsCharacterStream(PreparedStatement ps,int paramIndex,Reader characterStream,int contentLength):通过:通过Unicode字符流填充字符流填充CLOB数据;数据;l void setClobAsString(PreparedStatement ps,int paramIndex,String content):通过字符串填充:通过字符串填充CLOB数据。数据。为实现大容量数据写入,为实现大容量数据写入,JdbcTemplate提供了提供了如下方法:如下方法:execute(String s

    18、ql,AbstractLobCreatingPreparedStatementCallback lcpsc)【程序清单程序清单4-8】将文件存储到数据库中将文件存储到数据库中public void save(String filepath)throws FileNotFoundExceptionfinal File x=new File(filepath);final String filename=x.getName();final InputStream is=new FileInputStream(x);final LobHandler lobHandler=new DefaultLob

    19、Handler();/创建创建LobHandler对象对象 jdbcTemplate.execute(insert into filesave(filename,content)values(?,?),new AbstractLobCreatingPreparedStatementCallback(lobHandler)Override protected void setValues(PreparedStatement pstmt,LobCreator lobCreator)throws SQLException,DataAccessException pstmt.setString(1,f

    20、ilename);lobCreator.setBlobAsBinaryStream(pstmt,2,is,(int)x.length(););4.2.2 从数据库读取大容量数据LobHandler 接口常用方法如下:接口常用方法如下:InputStream getBlobAsBinaryStream(ResultSet rs,int columnIndex):从结果集中返回:从结果集中返回 InputStream,通过,通过 InputStream 读读取取 BLOB 数据;数据;byte getBlobAsBytes(ResultSet rs,int columnIndex):以二进制数:以

    21、二进制数据的方式获取结果集中的据的方式获取结果集中的 BLOB 数据;数据;InputStream getClobAsAsciiStream(ResultSet rs,int columnIndex):从结果集中返回从结果集中返回 InputStream,通过,通过 InputStreamn 以以 Ascii 字符流方式字符流方式读取读取 BLOB 数据;数据;Reader getClobAsCharacterStream(ResultSet rs,int columnIndex):从结果集中获取从结果集中获取 Unicode 字符流字符流 Reader,并通过,并通过 Reader以以Uni

    22、code 字字符流方式读取符流方式读取 CLOB 数据;数据;String getClobAsString(ResultSet rs,int columnIndex):从结果集中:从结果集中以字符串的方式获取以字符串的方式获取 CLOB 数据;数据;LobCreator getLobCreator():生成一个用户会话相关的:生成一个用户会话相关的 LobCreator 对对象。象。JdbcTemplate提供了如下方法:提供了如下方法:query(String sql,Object args,ResultSetExtractor rse)通过扩展实现通过扩展实现ResultSetExtrac

    23、tor接口的抽象接口的抽象类类 AbstractLobStreamingResultSetExtractor,可以用流的方式读取,可以用流的方式读取 LOB 字段的数据。字段的数据。【程序清单程序清单4-9】将数据库中特定文件内容进行恢复处理将数据库中特定文件内容进行恢复处理public void unsave(String filepath)throws FileNotFoundException File f=new File(filepath);final OutputStream os=new FileOutputStream(f);final LobHandler lobHandle

    24、r=new DefaultLobHandler();/创建创建LobHandler对象对象jdbcTemplate.query(select content from filesave where filename=+f.getName()+,new AbstractLobStreamingResultSetExtractor()/匿名内部类匿名内部类 protected void streamData(ResultSet rs)/以流的方式处理以流的方式处理LOB字段字段 throws SQLException,IOException,DataAccessException FileCopyUtils.copy(lobHandler.getBlobAsBinaryStream(rs,1),os););

    展开阅读全文
    提示  163文库所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
    关于本文
    本文标题:《Spring编程技术与应用》课件4.ppt
    链接地址:https://www.163wenku.com/p-5818515.html

    Copyright@ 2017-2037 Www.163WenKu.Com  网站版权所有  |  资源地图   
    IPC备案号:蜀ICP备2021032737号  | 川公网安备 51099002000191号


    侵权投诉QQ:3464097650  资料上传QQ:3464097650
       


    【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。

    163文库