欢迎来到三一文库! | 帮助中心 三一文库31doc.com 一个上传文档投稿赚钱的网站
三一文库
全部分类
  • 研究报告>
  • 工作总结>
  • 合同范本>
  • 心得体会>
  • 工作报告>
  • 党团相关>
  • 幼儿/小学教育>
  • 高等教育>
  • 经济/贸易/财会>
  • 建筑/环境>
  • 金融/证券>
  • 医学/心理学>
  • ImageVerifierCode 换一换
    首页 三一文库 > 资源分类 > PPT文档下载  

    传智播客Jdbc3方立勋.ppt

    • 资源ID:2299286       资源大小:199.51KB        全文页数:28页
    • 资源格式: PPT        下载积分:6
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录 QQ登录   微博登录  
    二维码
    微信扫一扫登录
    下载资源需要6
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    传智播客Jdbc3方立勋.ppt

    北京传智播客教育 www.itcast.cn,JDBC开发,讲师:方立勋,北京传智播客教育 www.itcast.cn,Tip:使用数据库连接池优化程序性能,DB,dao,servlet,用户3,用户1,用户2,用户n,connection,缺点:用户每次请求都需要向数据库获得链接,而数据库创建连接通常需要消耗相对较大的资源,创建时间也较长。假设网站一天10万访问量,数据库服务器就需要创建10万次连接,极大的浪费数据库的资源,并且极易造成数据库服务器内存溢出、拓机。,应用程序直接获取链接的缺点,北京传智播客教育 www.itcast.cn,Tip:使用数据库连接池优化程序性能,DB,dao,servlet,用户3,用户1,用户2,用户n,connection,connection,connection,connection,connection,连接池,用从连接池 中获得的连 接与数据库 通迅,北京传智播客教育 www.itcast.cn,Tip:编写数据库连接池,编写连接池需实现java.sql.DataSource接口。DataSource接口中定义了两个重载的getConnection方法: Connection getConnection() Connection getConnection(String username, String password) 实现DataSource接口,并实现连接池功能的步骤: 在DataSource构造函数中批量创建与数据库的连接,并把创建的连接加入LinkedList对象中。 实现getConnection方法,让getConnection方法每次调用时,从LinkedList中取一个Connection返回给用户。 当用户使用完Connection,调用Connection.close()方法时,Collection对象应保证将自己返回到LinkedList中,而不要把conn还给数据库。 Collection保证将自己返回到LinkedList中是此处编程的难点。,北京传智播客教育 www.itcast.cn,Tip:数据库连接池核心代码,使用动态代理技术构建连接池中的connection,proxyConn = (Connection) Proxy.newProxyInstance(this.getClass() .getClassLoader(), conn.getClass().getInterfaces(), new InvocationHandler() /此处为内部类,当close方法被调用时将conn还回池中,其它方法直接执行 public Object invoke(Object proxy, Method method, Object args) throws Throwable if (method.getName().equals(“close“) pool.addLast(conn); return null; return method.invoke(conn, args); );,北京传智播客教育 www.itcast.cn,Tip:开源数据库连接池,现在很多WEB服务器(Weblogic, WebSphere, Tomcat)都提供了DataSoruce的实现,即连接池的实现。通常我们把DataSource的实现,按其英文含义称之为数据源,数据源中都包含了数据库连接池的实现。 也有一些开源组织提供了数据源的独立实现: DBCP 数据库连接池 C3P0 数据库连接池 实际应用时不需要编写连接数据库代码,直接从数据源获得数据库的连接。程序员编程时也应尽量使用这些数据源的实现,以提升程序的数据库访问性能。,北京传智播客教育 www.itcast.cn,Tip:DBCP数据源,DBCP 是 Apache 软件基金组织下的开源连接池实现,使用DBCP数据源,应用程序应在系统中增加如下两个 jar 文件: Commons-dbcp.jar:连接池的实现 Commons-pool.jar:连接池实现的依赖库 Tomcat 的连接池正是采用该连接池来实现的。该数据库连接池既可以与应用服务器整合使用,也可由应用程序独立使用。,北京传智播客教育 www.itcast.cn,Tip:DBCP数据源,使用DBCP示例代码:,static InputStream in = JdbcUtil.class.getClassLoader(). getResourceAsStream(“dbcpconfig.properties“); Properties prop = new Properties(); prop.load(in); BasicDataSourceFactory factory = new BasicDataSourceFactory(); dataSource = factory.createDataSource(prop); ,北京传智播客教育 www.itcast.cn,Tip: C3P0 数据源,北京传智播客教育 www.itcast.cn,Tip:配置Tomcat数据源,查看Tomcat文档,示例代码:,Context initCtx = new InitialContext(); Context envCtx = (Context) initCtx.lookup(“java:comp/env“); dataSource = (DataSource)envCtx.lookup(“jdbc/datasource“);,特别提醒:此种配置下,驱动jar文件需放置在tomcat的lib下,北京传智播客教育 www.itcast.cn,Tip:JNDI技术简介,JNDI(Java Naming and Directory Interface),Java命名和目录接口,它对应于J2SE中的javax.naming包, 这套API的主要作用在于:它可以把Java对象放在一个容器中(JNDI容器),并为容器中的java对象取一个名称,以后程序想获得Java对象,只需通过名称检索即可。 其核心API为Context,它代表JNDI容器,其lookup方法为检索容器中对应名称的对象。,北京传智播客教育 www.itcast.cn,编写自己的JDBC框架,北京传智播客教育 www.itcast.cn,Tip:元数据 DataBaseMetaData,元数据:数据库、表、列的定义信息。 Connection.getDatabaseMetaData() DataBaseMetaData对象 getURL():返回一个String类对象,代表数据库的URL。 getUserName():返回连接当前数据库管理系统的用户名。 getDatabaseProductName():返回数据库的产品名称。 getDatabaseProductVersion():返回数据库的版本号。 getDriverName():返回驱动驱动程序的名称。 getDriverVersion():返回驱动程序的版本号。 isReadOnly():返回一个boolean值,指示数据库是否只允许读操作。,北京传智播客教育 www.itcast.cn,Tip:元数据 ParameterMetaData,PreparedStatement . getParameterMetaData() 获得代表PreparedStatement元数据的ParameterMetaData对象。 ParameterMetaData对象 getParameterCount() 获得指定参数的个数 getParameterType(int param) 获得指定参数的sql类型,北京传智播客教育 www.itcast.cn,Tip:元数据 ResultSetMetaData,ResultSet. getMetaData() 获得代表ResultSet对象元数据的ResultSetMetaData对象。 ResultSetMetaData对象 getColumnCount() 返回resultset对象的列数 getColumnName(int column) 获得指定列的名称 getColumnTypeName(int column) 获得指定列的类型,北京传智播客教育 www.itcast.cn,Tip:使用元数据简化JDBC代码,业务背景:系统中所有实体对象都涉及到基本的CRUD操作: 所有实体的CUD操作代码基本相同,仅仅发送给数据库的SQL语句不同而已,因此可以把CUD操作的所有相同代码抽取到工具类的一个update方法中,并定义参数接收变化的SQL语句。 实体的R操作,除SQL语句不同之外,根据操作的实体不同,对ResultSet的映射也各不相同,因此可义一个query方法,除以参数形式接收变化的SQL语句外,可以使用策略模式由qurey方法的调用者决定如何把ResultSet中的数据映射到实体对象中。,北京传智播客教育 www.itcast.cn,Tip:O-R Mapping简介,什么是O-R Mapping 常用O-R Mapping映射工具 Hibernate Ibatis Commons DbUtils(只是对JDBC简单封装),北京传智播客教育 www.itcast.cn,ApacheDBUtils框架,北京传智播客教育 www.itcast.cn,简介,commons-dbutils 是 Apache 组织提供的一个开源 JDBC工具类库,它是对JDBC的简单封装,学习成本极低,并且使用dbutils能极大简化jdbc编码的工作量,同时也不会影响程序的性能。因此dbutils成为很多不喜欢hibernate的公司的首选。 API介绍: org.apache.commons.dbutils.QueryRunner org.apache.commons.dbutils.ResultSetHandler 工具类 org.apache.commons.dbutils.DbUtils、。,北京传智播客教育 www.itcast.cn,DbUtils类,DbUtils :提供如关闭连接、装载JDBC驱动程序等常规工作的工具类,里面的所有方法都是静态的。主要方法如下: public static void close() throws java.sql.SQLException: DbUtils类提供了三个重载的关闭方法。这些方法检查所提供的参数是不是NULL,如果不是的话,它们就关闭Connection、Statement和ResultSet。 public static void closeQuietly(): 这一类方法不仅能在Connection、Statement和ResultSet为NULL情况下避免关闭,还能隐藏一些在程序中抛出的SQLEeception。 public static void commitAndCloseQuietly(Connection conn): 用来提交连接,然后关闭连接,并且在关闭连接时不抛出SQL异常。 public static boolean loadDriver(java.lang.String driverClassName):这一方装载并注册JDBC驱动程序,如果成功就返回true。使用该方法,你不需要捕捉这个异常ClassNotFoundException。,北京传智播客教育 www.itcast.cn,QueryRunner类,该类简单化了SQL查询,它与ResultSetHandler组合在一起使用可以完成大部分的数据库操作,能够大大减少编码量。 QueryRunner类提供了两个构造方法: 默认的构造方法 需要一个 javax.sql.DataSource 来作参数的构造方法。,北京传智播客教育 www.itcast.cn,QueryRunner类的主要方法,public Object query(Connection conn, String sql, Object params, ResultSetHandler rsh) throws SQLException:执行一个查询操作,在这个查询中,对象数组中的每个元素值被用来作为查询语句的置换参数。该方法会自行处理 PreparedStatement 和 ResultSet 的创建和关闭。 public Object query(String sql, Object params, ResultSetHandler rsh) throws SQLException: 几乎与第一种方法一样;唯一的不同在于它不将数据库连接提供给方法,并且它是从提供给构造方法的数据源(DataSource) 或使用的setDataSource 方法中重新获得 Connection。 public Object query(Connection conn, String sql, ResultSetHandler rsh) throws SQLException : 执行一个不需要置换参数的查询操作。 public int update(Connection conn, String sql, Object params) throws SQLException:用来执行一个更新(插入、更新或删除)操作。 public int update(Connection conn, String sql) throws SQLException:用来执行一个不需要置换参数的更新操作。,北京传智播客教育 www.itcast.cn,ResultSetHandler接口,该接口用于处理 java.sql.ResultSet,将数据按要求转换为另一种形式。 ResultSetHandler 接口提供了一个单独的方法:Object handle (java.sql.ResultSet .rs)。,北京传智播客教育 www.itcast.cn,ResultSetHandler 接口的实现类,ArrayHandler:把结果集中的第一行数据转成对象数组。 ArrayListHandler:把结果集中的每一行数据都转成一个数组,再存放到List中。 BeanHandler:将结果集中的第一行数据封装到一个对应的JavaBean实例中。 BeanListHandler:将结果集中的每一行数据都封装到一个对应的JavaBean实例中,存放到List里。,北京传智播客教育 www.itcast.cn,ResultSetHandler 接口的实现类,ColumnListHandler:将结果集中某一列的数据存放到List中。 KeyedHandler(name):将结果集中的每一行数据都封装到一个Map里,再把这些map再存到一个map里,其key为指定的key。 MapHandler:将结果集中的第一行数据封装到一个Map里,key是列名,value就是对应的值。 MapListHandler:将结果集中的每一行数据都封装到一个Map里,然后再存放到List,北京传智播客教育 www.itcast.cn,Tip:使用Jdbc操作多个表,部门和员工(一对多关系) 对象关系 数据库关系,int Id String name Set employees,int Id String name Department d,Department,Employee,Id int name String,Id int name String department_id int,Department表,Employee表,外键,北京传智播客教育 www.itcast.cn,Tip:使用Jdbc操作多个表,老师和学生(多对多关系),Id int name varchar,Id int name varchar,Teacher表,Student表,teacher_id int student_id int,中间表,外键,外键,数据库表结构,北京传智播客教育 www.itcast.cn,Tip:注意事项,不管java的对象存在何种关系,反映到关系型数据库中,都是使用外键表示纪录(即对象)的关联关系。 设计java对象如涉及到多个对象相互引用,要尽量避免使用一对多,或多对多关系,而应使用多对一描述对象之间的关系(或使用延迟加载的方式)。,

    注意事项

    本文(传智播客Jdbc3方立勋.ppt)为本站会员(本田雅阁)主动上传,三一文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一文库(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




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

    三一文库
    收起
    展开