JDBC-day02

JDBC-day02

JDBC控制事务(重要):

  1. 事务: 其实是一个包含多个步骤的业务操作,如果这个业务操作被事务管理,则这多个步骤要么同时成功,要么同时失败.
  2. 事务操作:
    1. 开启事务
    2. 提交事务
    3. 回滚事务
  3. 使用Connection对象来管理事务
    1. 方法:
      1. 开启事务: setAutoCommit(boolean autoCommit): 调用该方法设置参数为false,则表示开启事务.
        • 在执行sql前开启事务
      2. 提交事务: commit().
        • 当所有sql执行完成后提交事务
      3. 回滚事务: rollback().
        • 在catch中回滚事务,保证任何地方出现问题后都可以回滚,而且catch中抛出的异常要是Exception,保证可以捕捉所有异常.
  4. 案例-JDBC管理事务的实现:
    1. 代码: JDBC事务管理代码JDBCDemo3

数据库连接池(重要):

  • 我们之前写的代码都是运行一次申请一次资源,资源一用完就释放,就相当于你招聘了一个服务员来给顾客服务,顾客吃完走了你就把这个服务员开除了,下次有顾客来吃饭你就再招聘一个,吃完又把这个服务员开除了,循环往复…
  • 显然这样是不合理的,正常的情况应该是,多招聘几个服务员,当这个服务员服务完这个顾客以后,应该等着给下一位顾客服务,这个就和数据库连接池的定义是类似的.
  • 概念: 其实就是一个容器(集合),存放数据库连接.
    • 当系统初始化结束后,容器就被创建,容器中会申请多个数据库连接对象,当用户来访问数据库时,从容器中获取连接对象,用户访问结束后,就将数据库连接对象还给容器.
  • 好处:
    1. 节约资源,使得资源循环利用.
    2. 用户访问高效,因为可以节省掉申请资源这些时间.
  • 实现:
    1. 使用标准接口: javax.sql包下的DataSource接口.
      1. 方法:
        • 获取连接: Connection getConnection().
        • 归还连接: Connection.close(),如果连接对象Connection是从连接池中获取的,那么调用Connection.close()方法,则不会再关闭连接了,而是去归还连接.
    2. 一般我们不去实现它,由数据库厂商实现,例如:
      1. C3P0: 数据库连接池技术(较老).
      2. Druid(德鲁伊): 数据库连接池技术(较新),由阿里巴巴提供的,用的更多.
  • C3P0: 数据库连接池技术
    1. 使用步骤:
      1. 导入jar包(两个,还有一个是依赖包),如c3p0-0.9.5.2.jarmchange-commons-java-0.2.12.jar,注意不要忘记导入数据库的驱动jar包,因为这个说到底还是对数据库的操作.
      2. 定义配置文件:
        1. 名称: c3p0.properties或者 c3p0-config.xml等,在**c3p0 - JDBC3 Connection and Statement Pooling**中能看到.
        2. 路径: 直接将文件放在src目录下即可,它会自动加载,我们一般用c3p0-config.xml这种文件.
      3. 创建核心对象: 数据库连接池对象: ComboPooledDataSource对象.
      4. 获取连接: getConnection().
      5. 例子代码我放github了:
        1. c3p0工具jar包.
        2. c3p0测试代码.
  • Druid(德鲁伊): 数据库连接池技术
    1. 使用步骤:
      1. 导入jar包druid-1.0.9.jar,同时也不要忘了导入数据库驱动包.
      2. 定义并加载配置文件:
        1. Properties形式的文件,如: druid.properties.
        2. 可以叫任意名称,可以放在任意目录下,同时也不会自动加载了.
        3. 加载配置文件,ProPerties.
      3. 获取数据库连接池对象: 通过一个工厂类来获取: DruidDataSourceFactory.
      4. 获取连接: getConnection().
      5. 代码,超链接如下 :
        1. druid工具jar包.
        2. druid测试代码.
    2. 定义druid工具类:
      1. 定义一个类: JDBCUtils
      2. 提供静态代码块加载配置文件,初始化连接池对象.
      3. 提供方法:
        1. 获取连接方`: 通过数据库连接池获取连接.
        2. 释放资源.
        3. 获取连接池的方法.
      4. 代码超链接如下:
        1. druid工具类.
        2. druid工具类测试代码.

Spring JDBC: JDBC Template(重要):

  • Spring框架提供的对JDBC的简单封装,提供了JDBC Template 对象来简化JDBC的开发.
    • 步骤:
      1. 导入jar包,还要导入数据库连接池的包和数据库驱动包.
        • JDBC Template的jar包.
      2. 创建JDBC Template对象,但是这个对象创建的时候要依赖于数据源DataSource
        • JdbcTemplate template = new JdbcTemplate(dataSource).
      3. 调用JDBC Template的方法来完成CRUD的操作.
        • update()方法: 执行DML语句(增删改).
        • queryForMap()方法: 查询结果将结果集封装为Map集合.
          • 注意: 这个方法查询的结果集长度只能是一,也就是说只能查询一条数据,查询多条会报错,它会将字段名作为key,字段值作为value.
        • queryForList()方法: 查询结果将结果集封装为List集合.
          • 注意: 该方法是将每一条记录封装为一个Map对象,再将Map对象添加到List对象中.
        • query()方法: 查询结果将结果集封装为JavaBean对象.
          • query的参数: RowMapper
            • 一般我们使用BeanPropertyRowMapper实现类,可以完成数据到JavaBean的自动封装,使用的时候,要这样用:new BeanPropertyRowMapper<泛型>(泛型类的字节码文件对象即类型.class).
        • queryForObject()方法: 查询结果将结果集封装对象.
          • 一般用于聚合函数的查询,如练习7,用法是这样的: Long count = template.queryForObject(sql, long.class);.
      4. 例子: JDBCTemplate快速入门.
      5. 练习: 针对cart数据库中的product表(只有nameproduct两个字段).
        • 需求
          1. 平板1的价格price修改为1000元.
          2. 添加一条记录.
          3. 删除刚才添加的记录.
          4. 查询id为1的记录,将其封装为Map集合.
          5. 查询所有的记录,将其封装为List集合.
          6. 查询所有的记录,将其封装为product对象的List集合.
          7. 查询总记录数.
        • 代码: 练习代码合集.

你可能感兴趣的:(JDBC,JDBC)