《Java Web应用开发》课件ch06.ppt

上传人:eieieie 文档编号:21713044 上传时间:2023-11-03 格式:PPT 页数:30 大小:2.62MB
返回 下载 相关 举报
《Java Web应用开发》课件ch06.ppt_第1页
第1页 / 共30页
《Java Web应用开发》课件ch06.ppt_第2页
第2页 / 共30页
《Java Web应用开发》课件ch06.ppt_第3页
第3页 / 共30页
《Java Web应用开发》课件ch06.ppt_第4页
第4页 / 共30页
《Java Web应用开发》课件ch06.ppt_第5页
第5页 / 共30页
点击查看更多>>
资源描述

《《Java Web应用开发》课件ch06.ppt》由会员分享,可在线阅读,更多相关《《Java Web应用开发》课件ch06.ppt(30页珍藏版)》请在三一文库上搜索。

1、第第6章章 JDBC目标l了解了解JDBC体系结构体系结构l通过通过JDBC-ODBC桥驱动程序连接数据库桥驱动程序连接数据库l检索和浏览数据库中的数据检索和浏览数据库中的数据l实现对数据的更新实现对数据的更新l使用预编译语句操作数据库使用预编译语句操作数据库JDBC简介简介lJDBC(Java DataBase Connectivity)是是Java数据库连接的简称数据库连接的简称;l由一组用由一组用Java语言编写的类和接口组成,语言编写的类和接口组成,位于位于java.sql包中包中;l提供了一种标准的应用程序设计接口提供了一种标准的应用程序设计接口(API)。)。JDBC简介简介 Ja

2、va 程序程序 JDBC 驱动程序驱动程序数据库数据库SQL 命令命令 结果结果 SQL包包接口名接口名 说明说明 DriverManager此类用于加载和卸载各种驱动程序并此类用于加载和卸载各种驱动程序并建立与数据库的连接建立与数据库的连接Connection此接口表示与数据的连接此接口表示与数据的连接Statement此接口用于执行此接口用于执行 SQL 语句并将数据语句并将数据检索到检索到 ResultSet 中中 PreparedStatement 此接口用于执行预编译的此接口用于执行预编译的 SQL 语句语句 ResultSet此接口表示了查询出来的数据库数据此接口表示了查询出来的数

3、据库数据结果集结果集SQL包包开开 始始 导入导入 java.sql包包 加载并注册驱动程序加载并注册驱动程序 创建创建 Connection 对象对象 创建创建PreparedStatement 对象对象 执行语句执行语句 关闭关闭ResultSet 对象对象 关闭关闭Statement对象对象 关闭连接关闭连接 结束结束 使用使用ResultSet对象对象 Import java.sql.*;Class.forName(“sun.jdbc.odbc.JdbcOdbcDriver”);Connection con =DriverManager.getConnection(“jdbc:odbc

4、:数据源数据源”);PreparedStatement psmt=con.prepareStatement(sql);ResultSet rs=psmt.executeQuery();int num=psmt.executeUpdate();rs.close();psmt.close();con.close();连接数据库连接数据库l在在SQL Server中创建数据库和数据表中创建数据库和数据表l“管理工具管理工具”-”数据源数据源(ODBC)”,配置数配置数据源据源 import java.sql.*;Connection conn=null;try Class.forName(“sun.

5、jdbc.odbc.JdbcOdbcDriver”);String url=“jdbc:odbc:study”;conn=DriverManager.getConnection(url,“sa”,“sa”);System.out.println(数据库连接成功数据库连接成功);catch(SQLException ex1)ex1.printStackTrace();finally try if(conn!=null)conn.close();catch(SQLException ex2)ex2.printStackTrace();com.microsoft.jdbc.sqlserver.SQL

6、ServerDriverjdbc:microsoft:sqlserver:/localhost:1433;DataBaseName=bbs 检索数据库检索数据库(1)select 员工编号员工编号员工姓名员工姓名员工职务员工职务 所属部门所属部门基本工资基本工资 检索数据库检索数据库(2)读取字段名读取字段名ResultSetMetaData rsmd=rs.getMetaData();int numberOfColumn=rsmd.getColumnCount();%for(int i=1;i=cols;i+)out.print(“+rsmd.getColumnLabel(i)+“”);%f

7、or(int i=1;i 检索数据库检索数据库(3)可滚动的数据集可滚动的数据集%stmt=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_ONLY);String sql=select*from 员工档案员工档案;rs=stmt.executeQuery(sql);if(request.getParameter(row)!=null)String row=request.getParameter(row);if(row.equals(first)rs.first();else if(row.

8、equals(last)rs.last();else if(Integer.parseInt(row)首记录首记录a href=ScrollQuery.jsp?row=上一条上一条a href=ScrollQuery.jsp?row=下一条下一条尾记录尾记录更新数据库更新数据库 executeUpdate()Connection conn=null;PreparedStatement psmt=null;ResultSet rs=null;try conn=DriverManager.getConnection(url,user,password);String sql=insert into

9、 员工档案员工档案 values(?,?,?,?,?);psmt=conn.prepareStatement(sql);psmt.setString(1,“11”);psmt.setString(2,“jake”);psmt.setString(3,“manager”);psmt.setString(4,“研发部研发部”);psmt.setString(5,“2000”);int num=psmt.executeUpdate();使用事务使用事务l在数据库系统中,可以把一系列对数据源在数据库系统中,可以把一系列对数据源的操作作为一个整体来对待,这个整体称的操作作为一个整体来对待,这个整体称为一

10、次事务。为一次事务。l事务开始后,如果事务中的所有操作都能事务开始后,如果事务中的所有操作都能正确执行,则将这些操作全部施加到数据正确执行,则将这些操作全部施加到数据库上;否则,就取消所有的操作,这时,库上;否则,就取消所有的操作,这时,数据库中的数据和执行事务前的数据是一数据库中的数据和执行事务前的数据是一样的。样的。使用事务使用事务conn=DriverManager.getConnection(url,user,password);conn.setAutoCommit(false);/关闭自动提交模式关闭自动提交模式String sql=insert into 员工档案员工档案 valu

11、es(?,?,?,?,?);psmt=conn.prepareStatement(sql);psmt.setString(1,20);psmt.setString(2,段金锁段金锁);psmt.setString(3,经理助理经理助理);psmt.setString(4,研发部研发部);psmt.setString(5,2000);psmt.executeUpdate();psmt=conn.prepareStatement(update 员工档案员工档案 set 基本工资基本工资=3800 where 员工姓名员工姓名=jake);psmt.executeUpdate();mit();/正常

12、则提交事务,出现异常则回滚正常则提交事务,出现异常则回滚conn.rollback()conn.setAutoCommit(true);思考思考l在查询或更新数据库的每一次操作中,都在查询或更新数据库的每一次操作中,都要在连接和关闭数据库的语句中重复部分要在连接和关闭数据库的语句中重复部分代码,合适吗?代码,合适吗?import java.sql.*;try Class.forName(“sun.jdbc.odbc.JdbcOdbcDriver”);String url=“jdbc:odbc:study”;Connection conn=DriverManager.getConnection(

13、url,“sa”,“sa”);catch(ClassNotFoundException ex1)System.out.println(ex1.getMessage);catch(SQLException ex2)System.out.println(ex2.getMessage);finally try if(conn!=null)conn.close();catch(SQLException ex)out.println(ex.getMessage);数据库连接重用数据库连接重用 JSP页面1底层类(可重用)JSP页面2BaseDao 数据访问层工具类数据访问层工具类/BaseDao.jav

14、a类封装了数据库的连接和关闭操作类封装了数据库的连接和关闭操作package dao.impl;import java.sql.*;public class BaseDao private static final String DRIVER_CLASS=com.microsoft.jdbc.sqlserver.SQLServerDriver;private static final String DATABASE_URL=jdbc:microsoft:sqlserver:/localhost:1433;+DataBaseName=bbs;private static final String

15、 DATABASE_USRE=sa;private static final String DATABASE_PASSWORD=sa;BaseDao 数据访问层工具类数据访问层工具类/返回返回Connection对象对象 public static Connection getConnection()Connection conn=null;try Class.forName(DRIVER_CLASS);conn=DriverManager.getConnection(DATABASE_URL,DATABASE_USRE,DATABASE_PASSWORD);catch(ClassNotFou

16、ndException ex)System.out.println(ex.getMessage();catch(SQLException ex)System.out.println(ex.getMessage();return conn;BaseDao 数据访问层工具类数据访问层工具类public static void closeConnection(Connection conn)try if(conn!=null)conn.close();catch(SQLException ex)System.out.println(ex.getMessage();public static void

17、 closePreparedStatement(PreparedStatement psmt)try if(psmt!=null)psmt.close();catch(SQLException ex)System.out.println(ex.getMessage();public static void closeResultSet(ResultSet rs)try if(rs!=null)rs.close();catch(SQLException ex)System.out.println(ex.getMessage();利用利用BaseDao类连接数据库类连接数据库 JSP页面页面1调用

18、调用 结果结果 底层类(可重用)底层类(可重用)JSP页面页面2利用利用BaseDao类连接数据库类连接数据库 员工编号员工编号 员工姓名员工姓名 员工职务员工职务 所属部门所属部门 基本工资基本工资 项目中项目中BaseDao类的设计类的设计public int executeSQL(String preparedSql,String param)Connection conn=null;PreparedStatement pstmt=null;int num=0;try conn=getConnection();pstmt=conn.prepareStatement(preparedSql

19、);if(param!=null)for(int i=0;i param.length;i+)pstmt.setString(i+1,parami);num=pstmt.executeUpdate();catch(ClassNotFoundException e)e.printStackTrace();catch(SQLException e)e.printStackTrace();finally closeAll(conn,pstmt,null);return num;/UserDaoImplpublic int addUser(User user)String sql=insert int

20、o TBL_USER“+(uname,upass,gender,head,regTime)“+“values(?,?,?,?,?);String param=user.getUName(),user.getUPass(),user.getGender(),user.getHead(),new Date();return this.executeSQL(sql,param);企业级开发对企业级开发对Dao层的要求层的要求l 企业级开发需要稳健和高效的数据访问层企业级开发需要稳健和高效的数据访问层l完成对数据库的增删改查操作完成对数据库的增删改查操作l能够处理数据库发生的各种错误能够处理数据库发生

21、的各种错误l可以灵活的修改配置可以灵活的修改配置l提供方便使用的工具提供方便使用的工具l高性能高性能请求请求响应响应操作操作结果结果要求高效、稳健的数据访问层要求高效、稳健的数据访问层打开连接,操作数打开连接,操作数据库,关闭连接据库,关闭连接多次重复操作多次重复操作数据库连接池数据库连接池l普通电话普通电话-建立连接,等待回应建立连接,等待回应l热线电话热线电话-已建立连接已建立连接连接连接已连接已连接开始通话开始通话开始通话开始通话已连接,直接通话已连接,直接通话连接中连接中流程框架图标使用规范流程框架图标使用规范l 连接池中的连接连接池中的连接想要获得连接想要获得连接返回一个连接返回一个

22、连接返回一个已连接返回一个已连接好的空闲连接好的空闲连接应用程序从连接池中获得连接应用程序从连接池中获得连接连接池是由容器提供的,连接池是由容器提供的,用来管理池中连接对象用来管理池中连接对象应用程序应用程序连接池连接池Connection1Connection2Connection3数据源简介数据源简介l 数据源(数据源(DataSource)ljavax.sql.DataSource接口负责建立与数据库的连接接口负责建立与数据库的连接l从从Tomcat的数据源获得连接的数据源获得连接l把连接保存在连接池中把连接保存在连接池中应用程序应用程序Connection1Connection2Con

23、nection3想要获得连接想要获得连接返回一个连接返回一个连接连接池连接池连接池中的连接对象连接池中的连接对象是由谁创建的呢?是由谁创建的呢?JNDI介绍介绍l 如何获得如何获得DataSource对象对象l数据源由数据源由Tomcat提供,不能在程序中创建实例提供,不能在程序中创建实例l使用使用JNDI获得获得DataSource引用引用l什么是什么是JNDIlJNDI(Java Naming and Directory Interface,Java命命名和目录接口)是一组在名和目录接口)是一组在Java应用中访问命名和目录服应用中访问命名和目录服务的务的APIljavax.namming

24、.Context接口的接口的lookup()方法方法应用程序应用程序jdbc/d1jdbc/d2数据源数据源数据源名称数据源名称Connectioncontext.lookup(jdbc/d1)使用使用JNDI获取连接对象获取连接对象l import javax.naming.Context;import javax.naming.InitialContext;import javax.naming.NamingException;import javax.sql.DataSource;public class BaseDao public static Connection getConne

25、ction()try Context ic=new InitialContext();DataSource source=(DataSource)ic.lookup(java:comp/env/jdbc/bbs);Connection conn=source.getConnection();return conn;catch(SQLException e1)e1.printStackTrace();catch(NamingException e2)e2.printStackTrace();return null;使用使用JNDI和数和数据源要导入的包据源要导入的包通过通过Context、Dat

26、aSource获取获取Connection对象对象分为两部分分为两部分java:comp/env为为JavaEE默认路径默认路径jdbc/bbs为为DataSource名名JNDI的配置的配置l Tomcat的的conf/context.xml中的配置中的配置name指定指定Resource的的JNDI名称名称auth指定管理指定管理Resource的的Manager(Container:由容器创建和管理由容器创建和管理|Application:由:由Web应用创建和管理)应用创建和管理)type指定指定Resource所属的所属的Java类类maxActive指定连接池中处于活动状态的数据库

27、连接的最大数目指定连接池中处于活动状态的数据库连接的最大数目maxIdle指定连接池中处于空闲状态的数据库连接的最大数目指定连接池中处于空闲状态的数据库连接的最大数目maxWait指定连接池中的连接处于空闲的最长时间,超过这个时间会抛出异指定连接池中的连接处于空闲的最长时间,超过这个时间会抛出异常,取值为常,取值为-1-1,表示可以无限期等待,表示可以无限期等待 JNDI的配置的配置l 加入数据库驱动文件加入数据库驱动文件l把数据库驱动的把数据库驱动的.jar文件,加入到文件,加入到Tomcat的的commonlib中中l应用程序的应用程序的web.xml文件的配置文件的配置l在在web.xml中配置中配置 jdbc/bbs javax.sql.DataSource Container 指定指定JNDI的名字,与的名字,与元素中的元素中的name一致一致指定引用资源的类名,与指定引用资源的类名,与元素中的元素中的type一致一致指定管理所引用资源的管理者与指定管理所引用资源的管理者与元素中的元素中的auth一致一致总结总结l使用使用JDBC技术实现数据访问层(技术实现数据访问层(Dao)UserDaoImpl BoardDaoImplBaseDao TopicDaoImpl ReplyDaoImpl

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 研究生考试


经营许可证编号:宁ICP备18001539号-1