发表于: 2020-10-05 19:35:41

1 1396


今天完成的事情:
遇到的问题:

JDBC连接池&JDBCTemplate

数据库连接池

1. 概念:其实就是一个容器(集合),存放数据库连接的容器。

    当系统初始化好后,容器被创建,容器中会申请一些连接对象,当用户来访问数据库时,从容器中获取连接对象,用户访问完之后,会将连接对象归还给容器。

2. 好处:

1. 节约资源

2. 用户访问高效

3. 实现:

1. 标准接口:DataSource   javax.sql包下的

1. 方法:

* 获取连接:getConnection()

* 归还连接:Connection.close()。如果连接对象Connection是从连接池中获取的,那么调用Connection.close()方法,则不会再关闭连接了。而是归还连接

2. 一般我们不去实现它,有数据库厂商来实现

1. C3P0:数据库连接池技术

2. Druid:数据库连接池实现技术,由阿里巴巴提供的



C3P0:数据库连接池技术

* 步骤:

1. 导入jar包 (两个) c3p0-0.9.5.2.jar mchange-commons-java-0.2.12.jar ,

* 不要忘记导入数据库驱动jar包

2. 定义配置文件:

* 名称: c3p0.properties 或者 c3p0-config.xml

* 路径:直接将文件放在src目录下即可。

3. 创建核心对象 数据库连接池对象 ComboPooledDataSource

4. 获取连接: getConnection

* 代码:

//1.创建数据库连接池对象

        DataSource ds  = new ComboPooledDataSource();

        //2. 获取连接对象

        Connection conn = ds.getConnection();

出现错误,忘记导入数据库驱动jar包



测试最大连接数量


将i改成20,结果也是10,说明最大连接数量被限制成功了。




Druid:数据库连接池实现技术,由阿里巴巴提供的

1. 步骤:

1. 导入jar包 druid-1.0.9.jar

2. 定义配置文件:

* 是properties形式的

* 可以叫任意名称,可以放在任意目录下

3. 加载配置文件。Properties

4. 获取数据库连接池对象:通过工厂来来获取  DruidDataSourceFactory

5. 获取连接:getConnection

* 代码:

//3.加载配置文件

        Properties pro = new Properties();     //properties类主要用来读取配置文件

        InputStream is = DruidDemo.class.getClassLoader().getResourceAsStream("druid.properties");

        pro.load(is);

        //4.获取连接池对象

        DataSource ds = DruidDataSourceFactory.createDataSource(pro);

        //5.获取连接

        Connection conn = ds.getConnection();

2. 定义工具类

1. 定义一个类 JDBCUtils

2. 提供静态代码块加载配置文件,初始化连接池对象

3. 提供方法

1. 获取连接方法:通过数据库连接池获取连接

2. 释放资源

3. 获取连接池的方法


使用druid进行演示,出现报错




了解异常

运行时异常RuntimeException指: 不是必须进行try catch的异常 
常见运行时异常: 
除数不能为0异常:ArithmeticException 
下标越界异常:ArrayIndexOutOfBoundsException 
空指针异常:NullPointerException 
在编写代码的时候,依然可以使用try catch throws进行处理,与可查异常不同之处在于,即便不进行try catch,也不会有编译错误 
Java之所以会设计运行时异常的原因之一,是因为下标越界,空指针这些运行时异常太过于普遍,如果都需要进行捕捉,代码的可读性就会变得很糟糕。


空指针异常常见的几种方式(来源网址:https://blog.csdn.net/Zhangxichao100/article/details/73124228)


出现

知道了,是定义域的不同,把它拿出来就好了

使用Druid连接池工具类,给db3数据库的account表加一条数据

package Utils;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;

/**
* 使用新的工具类
*/

public class JDBCUtils2 {

public static void main(String[] args) {
/*
        *完成添加操作:给account表添加一条记录
        */
       Connection conn = null;
       PreparedStatement pstmt = null;


       try {
//1.获取连接
           conn = JDBCUtils1.getConnection();
           //2.定义sql
           String sql = "insert into account values(null,?,?)";
           //3.获取pstmt对象
           pstmt = conn.prepareStatement(sql);
           //4.给?赋值
           pstmt.setString(1,"王五");
           pstmt.setDouble(2,3000);
           //5.执行sql
           int count = pstmt.executeUpdate();
           System.out.println(count);

       } catch (SQLException throwables) {
throwables.printStackTrace();
       }finally {
//6.释放资源
           JDBCUtils1.close(pstmt,conn);
       }
}
}




Spring JDBC

* Spring框架对JDBC的简单封装。提供了一个JDBC对象简化JDBC的开发

* 步骤:

1. 导入jar包

2. 创建JdbcTemplate 对象。依赖于数据源DataSource

* JdbcTemplate template = new JdbcTemplate(ds);

3. 调用JdbcTemplate的方法来完成CRUD的操作

* update():执行DML语句。增、删、改语句

* queryForMap():查询结果将结果集封装为map集合,将列名作为key,将值作为value 将这条记录封装为一个map集合

               * 注意:这个方法查询的结果集长度只能是1

* queryForList():查询结果将结果集封装为list集合

               * 注意:将每一条记录封装为一个Map集合,再将Map集合装载到List集合中

* query():查询结果,将结果封装为JavaBean对象

* query的参数:RowMapper

* 一般我们使用BeanPropertyRowMapper实现类。可以完成数据到JavaBean的自动封装

* new BeanPropertyRowMapper<类型>(类型.class)

* queryForObject:查询结果,将结果封装为对象

* 一般用于聚合函数的查询

通过JdbcTemplate更新数据


 练习:

* 需求:

1. 修改1号数据的 salary 为 10000

2. 添加一条记录

3. 删除刚才添加的记录

4. 查询id为1的记录,将其封装为Map集合

5. 查询所有记录,将其封装为List

6. 查询所有记录,将其封装为Emp对象的List集合

7. 查询总记录数


1.修改1号数据的 salary 为 10000




2.添加一条记录


3.删除刚才添加的记录


4.查询id为1的记录,将其封装为Map集合

出现错误

在数据库中这个语句可以使用



5. 查询所有记录,将其封装为List

6. 查询所有记录,将其封装为Emp对象的List集合

出现错误


修改为



运行成功


7. 查询总记录数





明天计划的事情:

学习Mybatis,开始做任务17.




收获:

知道了数据池,了解了JDBCTemplate的用法,发现JDBCTemplate用起来很方便,语句少写很多。






返回列表 返回列表
评论

    分享到