JDBC数据库连接池(超详解!!!)

JDBC

一、数据库连接池

1.数据库连接池

概念:存放数据库连接的一个容器(集合)Connection

当系统运行起来之后,这个连接池就被创建,在这个连接池当中,会申请一些对象,当有用户来访问数据库的时候,就从这个连接池当中获取连接对象,用户访问结束之后,连接池对象会归还给容器

2.连接池的实现

java官方提供了标准接口 DataSource(javax.sql包下)

//常用方法
getConnection();//获取连接对象

conn.close();//归还连接池对象

此接口由数据库厂商为我们实现

①C3P0 ②Druid阿里巴巴开发的数据库连接池

3.C3p0

  1. 导入jar包 2个
  2. 定义配置文件 c3p0.properties或者c3p0-config.xml 配置文件直接放在src下
  3. 创建数据源连接对象 DataSource
  4. 获取连接
public class demo1 {
    
    
    public static void main(String[] args) {
    
    

        try {
    
    
            //3. 创建数据源连接对象  DataSource
            DataSource dataSource = new ComboPooledDataSource();
            //4. 获取连接
            Connection connection = dataSource.getConnection();
            System.out.println(connection.toString());
        } catch (SQLException throwables) {
    
    
            throwables.printStackTrace();
        }
    }
}
案例
public class demo1 {
    
    
    public static void main(String[] args) {
    
    
        DataSource dataSource = null;
        Connection connection = null;
        PreparedStatement preparedStatement = null;
        ResultSet resultSet = null;
        try {
    
    
            //3. 创建数据源连接对象  DataSource
             dataSource = new ComboPooledDataSource();
            //4. 获取连接
             connection = dataSource.getConnection();
            String sql = "select * from mytest";
             preparedStatement = connection.prepareStatement(sql);
             resultSet = preparedStatement.executeQuery();

            while (resultSet.next()){
    
    
                int id = resultSet.getInt("id");
                String name = resultSet.getString("sname");
                String pass = resultSet.getString("spwd");
                System.out.println(id+name+pass);
            }
        } catch (SQLException throwables) {
    
    
            throwables.printStackTrace();
        }finally {
    
    
            try {
    
    
                connection.close();
            } catch (SQLException throwables) {
    
    
                throwables.printStackTrace();
            }
            try {
    
    
                preparedStatement.close();
            } catch (SQLException throwables) {
    
    
                throwables.printStackTrace();
            }
            try {
    
    
                resultSet.close();
            } catch (SQLException throwables) {
    
    
                throwables.printStackTrace();
            }
        }
    }
}

4.Druid

1.导入jar包

2.定义配置文件, 任意的名称和任意的位置 eg:xxx.properties

3.加载配置文件

4.创建数据源对象

5.获取连接

public class DruidDemo1 {
    
    
    public static void main(String[] args) {
    
    
        DataSource dataSource = null;
        Connection connection = null;
        PreparedStatement preparedStatement = null;
        ResultSet resultSet = null;
        try {
    
    
            dataSource = new ComboPooledDataSource();
            connection = dataSource.getConnection();
            String sql = "select * from mytest";
            preparedStatement = connection.prepareStatement(sql);
            resultSet = preparedStatement.executeQuery();

            while (resultSet.next()){
    
    
                int i = resultSet.getInt(1);
                String name = resultSet.getString("sname");
                String pass = resultSet.getString("spwd");
                System.out.println(i+"---"+name+"---"+pass);
            }
        } catch (SQLException throwables) {
    
    
            throwables.printStackTrace();
        }finally {
    
    
            try {
    
    
                connection.close();
            } catch (SQLException throwables) {
    
    
                throwables.printStackTrace();
            }
            try {
    
    
                preparedStatement.close();
            } catch (SQLException throwables) {
    
    
                throwables.printStackTrace();
            }
            try {
    
    
                resultSet.close();
            } catch (SQLException throwables) {
    
    
                throwables.printStackTrace();
            }
        }
    }
}
工具类
  • 创建实体类 user 和数据库表对应

  • 定义一个工具类

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

  • 提供方法

    ​ 1.获取连接池对象的方法

    ​ 2.释放资源的方法

    ​ 3.获取数据源对象的方法

//工具类
public class DruidUtiles {
    
    
    private static DataSource dataSource;

    static {
    
    
        //读取资源文件,获取值,执行一次
        Properties properties = new Properties();
        try {
    
    
            //加载配置文件
            properties.load(new FileReader("D:\\桌面\\JDBC\\JDBC-C3P0\\src\\druid.properties"));
            //初始化连接池对象
                dataSource = DruidDataSourceFactory.createDataSource(properties);
        } catch (Exception e) {
    
    
            e.printStackTrace();
        }
    }
    //1.获取连接池对象的方法
    public static Connection getConnection() throws SQLException {
    
    
        return dataSource.getConnection();
    }
    //2.释放资源的方法
    public static void close(Connection connection, PreparedStatement preparedStatement){
    
    
        if(connection!=null){
    
    
            try {
    
    
                connection.close();
            } catch (SQLException throwables) {
    
    
                throwables.printStackTrace();
            }
        }
        if(preparedStatement!=null){
    
    
            try {
    
    
                preparedStatement.close();
            } catch (SQLException throwables) {
    
    
                throwables.printStackTrace();
            }
        }
    }
    //2.释放资源的方法
    public  static  void  close(Connection connection, PreparedStatement preparedStatement, ResultSet resultSet){
    
    
        if(connection!=null){
    
    
            try {
    
    
                connection.close();
            } catch (SQLException throwables) {
    
    
                throwables.printStackTrace();
            }
        }
        if(preparedStatement!=null){
    
    
            try {
    
    
                preparedStatement.close();
            } catch (SQLException throwables) {
    
    
                throwables.printStackTrace();
            }
        }
        if(resultSet!=null){
    
    
            try {
    
    
                resultSet.close();
            } catch (SQLException throwables) {
    
    
                throwables.printStackTrace();
            }
        }
    }
    //	3.获取数据源对象的方法
    public  static DataSource getDataSource(){
    
    
        return dataSource;
    }
}

测试
/**
 * 添加操作
 */
public class DruidDemo2 {
    
    
    public static void main(String[] args) {
    
    
        Connection connection = null;
        PreparedStatement preparedStatement = null;
        ResultSet resultSet = null;
        try {
    
    
            connection =  DruidUtiles.getConnection();
            String sql="insert into mytest values(null,?,?)";
            preparedStatement =  connection.prepareStatement(sql);
            preparedStatement.setString(1,"hhbh");
            preparedStatement.setString(2,"821821");
            int i = preparedStatement.executeUpdate();
            System.out.println(i);
        } catch (SQLException throwables) {
    
    
            throwables.printStackTrace();
        }finally {
    
    
            DruidUtiles.close(connection,preparedStatement);
        }
    }
}




//查询
public class DruidDemo3 {
    
    
    public static void main(String[] args) {
    
    
        Connection connection = null;
        PreparedStatement preparedStatement = null;
        ResultSet resultSet = null;
        try {
    
    
            connection =  DruidUtiles.getConnection();
            String sql="select * from mytest";
            preparedStatement =  connection.prepareStatement(sql);
            resultSet =  preparedStatement.executeQuery();
            List<user> list = new ArrayList<>();
            while (resultSet.next()){
    
    
                user u = new user();
                u.setId(resultSet.getInt("id"));
                u.setName(resultSet.getString("sname"));
                u.setPassword(resultSet.getString("spwd"));
                System.out.println(u);
            }
        } catch (SQLException throwables) {
    
    
            throwables.printStackTrace();
        }finally {
    
    
            DruidUtiles.close(connection,preparedStatement,resultSet);
        }
    }
}

二、JdbcTemPlate

Spring框架对JDBC的简单封装,提供了一个JdbcTemplate对象,大大的简化了开发

1.导入jar包 5个

2.创建一个JdbcTemPlate,依赖对象DataSource

3.调用JdbcTemPlate对象中的方法帮助我们实现增删改查

update();//执行增删改语句
queryForMap();//查询结束,并将结果封装成Map集合
queryForList();//查询结束,并将结果封装成Map集合,并将map存放在list当中
query();//查询结果,并将结果封装成JavaBean对象
queryForObject();//查询结果,并将结果封装成对象

练习:

修改 密码

添加

删除

查询所有记录 将结果封装成map------结果只有一条,列名为key,值为value

查询所有记录 将结果封装成list

查询所有记录 将结果封装成JavaBean

查询总记录数

public class jdbcTemplateDemo {
    
    
    private JdbcTemplate jt = new JdbcTemplate(DruidUtiles.getDataSource());
    //修改密码
    public void test1(){
    
    
    String sql = "update mytest set spwd = ? where id =?";
        int update = jt.update(sql, 730730, 8);
        System.out.println(update);
    }
    //添加
    public void test2(){
    
    
        String sql = "insert into mytest values(null,?,?)";
        int update = jt.update(sql,"张三", 77777);
        System.out.println(update);
    }
    //删除
    public void test3(){
    
    
        String sql = "delete from mytest where id = ?";
        int update = jt.update(sql,9);
        System.out.println(update);
    }
    //查询所有记录 将结果封装成map
    public void test4(){
    
    
        String sql = "select * from mytest where id = ?";
        Map<String, Object> map = jt.queryForMap(sql,1);
        System.out.println(map);
        }
    //查询所有记录 将结果封装成list
    public void test5(){
    
    
        String sql = "select * from mytest ";
        List<Map<String, Object>> maps = jt.queryForList(sql);
        System.out.println(maps);
    }
    //查询所有记录 将结果封装成JavaBean-----方法1
    public void test6(){
    
    
        String sql = "select * from mytest ";
        List<user> query = jt.query(sql, new RowMapper<user>() {
    
    

            @Override
            public user mapRow(ResultSet resultSet, int i) throws SQLException {
    
    
                user u = new user();
                u.setId(resultSet.getInt("id"));
                u.setName(resultSet.getString("sname"));
                u.setPassword(resultSet.getString("spwd"));
                return u;
            }
        });
        System.out.println(query);
    }
    //查询所有记录 将结果封装成JavaBean-----方法2
    public void test7(){
    
    
        String sql = "select * from mytest ";
        List<user> query = jt.query(sql, new BeanPropertyRowMapper<user>(user.class));
        System.out.println(query);
    }
    //查询总记录数
    public void test8(){
    
    
        String sql = "select count (*) from mytest ";
        Long aLong = jt.queryForObject(sql,Long.class);
        System.out.println(aLong);
    }
}


测试
public class test {
    
    
    public static void main(String[] args) {
    
    
    jdbcTemplateDemo jdbcTemplateDemo = new jdbcTemplateDemo();
        jdbcTemplateDemo.test1();
        jdbcTemplateDemo.test2();
        jdbcTemplateDemo.test3();
        jdbcTemplateDemo.test4();
        jdbcTemplateDemo.test5();
        jdbcTemplateDemo.test6();
        jdbcTemplateDemo.test7();
        jdbcTemplateDemo.test8();
    }
}

猜你喜欢

转载自blog.csdn.net/zjdzka/article/details/112093966