Java学习之数据库连接池

Java学习之数据库连接池0x00前言前面用到的jdbc,在每次连接数据库的时候都需要去重新建立对象。我们在这里会用到创建一个连接池,每次使用完后归还给连接池。0x01连接池概述连接池其实

大家好,又见面了,我是全栈君,祝每个程序员都可以多学几门语言。

Java学习数据库连接池

0x00 前言

前面用到的jdbc,在每次连接数据库的时候都需要去重新建立对象。我们在这里会用到创建一个连接池,每次使用完后归还给连接池。

0x01 连接池概述

连接池其实就是一个容器(集合),存放数据库连接的容器。
当系统初始化好后,容器被创建,容器中会申请一些连接对象,当用户来访问数据库时,从容器中获取连接对象,用户访问完之后,会将连接对象归还给容器。

使用连接池能节约资源使用户访问高效。

0x02 连接池实现

C3P0创建线程池

添加jar文件到libs目录下,所需文件:

c3p0-0.9.5.2.jar  c3p0包 mchange-commons-java-0.2.12.jar//c3p0 依赖包
mysql-connector //数据库连接驱动包

将c3p0-config.xml放到src目录下,并进行配置。

创建连接池代码:

public class test1 {
    public static void main(String[] args) throws SQLException {
        DataSource dataSource = new ComboPooledDataSource();
        Connection connection = dataSource.getConnection();
        System.out.println(connection);
        


    }
}

Druid 数据库连接池

导入jar包

druid-1.0.9.jar

导入druid.properties文件

代码:

public class test2 {
    public static void main(String[] args) throws Exception {
        Properties pro = new Properties();  //创建properties对象
        InputStream is = test2.class.getClassLoader().getResourceAsStream("druid.properties");   //获取配置文件资源
        pro.load(is);  //加载配置文件
        DataSource dataSource = DruidDataSourceFactory.createDataSource(pro);   //创建连接池对象,并传入配置文件信息
        Connection connection = dataSource.getConnection();    //获取连接对象
        System.out.println(connection);



    }
}

使用完这些方式后可以发现,连接数据库也比较方便了,都是一些封装好的代码。

我们在这里可以再定义一个工具类,把连接的东西都封装在工具类里面,简化我们的代码。

工具类:

public class JDBCutiss {
    private static DataSource ds;

    static {
        Properties pro = new Properties();
        InputStream rs = JDBCutiss.class.getClassLoader().getResourceAsStream("druid.properties");
        try {
            pro.load(rs);
            try {
                ds = DruidDataSourceFactory.createDataSource(pro);

            } catch (Exception e) {
                e.printStackTrace();
            }
        } catch (IOException e) {
            e.printStackTrace();
        }


        }
            //返回连接对象
        public static Connection getConnection() throws SQLException {
        return ds.getConnection();
        }
        public  static void close(Statement stmt,Connection conn){
        if (stmt!=null){
            try {
                stmt.close();
            } catch (SQLException throwables) {
                throwables.printStackTrace();
            }

        }
        if (conn!=null){
            try {
                conn.close();
            } catch (SQLException throwables) {
                throwables.printStackTrace();
            }
        }

        }
        //该方法返回定义好的DataSource对象
        public static DataSource getDataSource(){
        return ds;
        }


    }

main方法:

public class test2 {
    public static void main(String[] args) throws Exception {
        Connection connection = JDBCutiss.getConnection();//获取连接对象
        String sql = "select * from users where id =?";  //设置sql语句
        PreparedStatement preparedStatement = connection.prepareStatement(sql);//传入sql语句并创建预编译执行对象
        preparedStatement.setString(1,"1");  //sql语句设置值
//        System.out.println(sql);
        ResultSet resultSet = preparedStatement.executeQuery();  //执行sql语句
        while (resultSet.next()){
            System.out.println(resultSet.getString("id"));  //获取id
            System.out.println(resultSet.getString("username"));//获取用户账户
            System.out.println(resultSet.getString("password"));//获取密码
        }
        JDBCutiss.close(preparedStatement,connection);


    }
}


Spring JDBC

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

创建对象:

JdbcTemplate template = new JdbcTemplate(ds);

常用方法:

* update():执行DML语句。增、删、改语句
		* queryForMap():查询结果将结果集封装为map集合,将列名作为key,将值作为value 将这条记录封装为一个map集合
			* 注意:这个方法查询的结果集长度只能是1
		* queryForList():查询结果将结果集封装为list集合
			* 注意:将每一条记录封装为一个Map集合,再将Map集合装载到List集合中
		* query():查询结果,将结果封装为JavaBean对象
			* query的参数:RowMapper
				* 一般我们使用BeanPropertyRowMapper实现类。可以完成数据到JavaBean的自动封装
				* new BeanPropertyRowMapper<类型>(类型.class)
		* queryForObject:查询结果,将结果封装为对象
			* 一般用于聚合函数的查询

Template连接代码:

public class test3 {
    public static void main(String[] args) {
        JdbcTemplate template = new JdbcTemplate(JDBCutiss.getDataSource());//从工具类获取对象传入
        String sql = "update users set password =? where id =?";


        int admin = template.update(sql,"500",2);  //参数sql语句需要的参数,再进行执行sql语句
        System.out.println(admin);



    }
}

总体来说也就3行代码就实现了这么一个操作数据库的,比前面几个方法都简单很多,其他的所需功能都在工具类里面封装好了,可以直接进行调用。

0x03 结尾

在使用了spring Jdbc后发现代码比前面几个都轻松很多,定义的工具类开发程序的时候可以直接复制来使用,或者做一点稍微的改进再进行使用。总体来说spring还是很方便。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/119943.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • win10如何永久关闭数字签名

    win10如何永久关闭数字签名1、如何永久关闭Win10驱动程序方法一:永久有效步骤如下:1、在开始按钮点击右键,选择“Windowspowershell(管理员)”2、执行以下命令(复制后,在命令提示符中单击鼠标右键即可完成粘贴,然后按回车键执行):bcdedit.exe/setnointegritycheckson3、命令瞬间执行完毕,若想恢复默认验证,执行如下命令即可:bcdedi…

    2022年5月13日
    117
  • 优化算法——梯度下降法

    优化算法——梯度下降法最近一直在看机器学习的材料,归纳起来就是把一个学习的问题转化为优化的问题,机器学习算法的本质就是如何对问题抽象建模,使一个学习的问题变为一个优化的问题。优化的算法有很多种,从最基本的梯度下降法到现在的一些启发式算法,如遗传算法(GA),差分演化算法(DE),粒子群算法(PSO)和人工蜂群算法(ABC)。梯度下降法又被称为最速下降法(Steepestdescendmethod),其理论基

    2025年7月13日
    2
  • 干货丨初学者学Java应该安装什么软件?

    干货丨初学者学Java应该安装什么软件?初学者刚刚入门学习需要用到一些开发工具,初学Java一般从控制台应用程序开发开始的,在cmd下调试,为你的电脑搭建好开发环境,需要在网站上下载JDK,安装完成后调试成功就可以开始写你的J…

    2022年7月8日
    24
  • 多进程 python_Python 多进程

    多进程 python_Python 多进程进程前置知识点进程:一个程序运行起来后,代码+用到的资源称之为进程,它是操作系统分配资源的基本单元。并发:指的是任务数多余cpu核数,通过操作系统的各种任务调度算法,实现用多个任务“一起”执行

    2022年7月30日
    7
  • 前端MD5加密——js-md5[通俗易懂]

    前端MD5加密——js-md5[通俗易懂]1.概述是通过前台js加密的方式对密码等私密信息进行加密的工具2.js加密的好处(1)用js对私密信息加密可避免在网络中传输明文信息,被人截取数据包而造成数据泄露。(2)避免缓存中自动缓存密码。比如在使用谷歌浏览器登陆时,输入的用户名和密码会自动缓存,下次登陆时无需输入密码就可以实现登陆,这样就给别人留下漏洞,当别人用你电脑登陆或把input的type改为test那么你的密码就泄露…

    2022年7月11日
    24
  • 基于阿里DDNS的ipv6 for windows版软件

    基于阿里DDNS的ipv6 for windows版软件基于阿里DDNS的ipv6forwindows版软件会搜到这篇帖子的同学,应该和我一样,满世界为自己的虚拟主机找寻ipv6的动态ddns程序吧?下面我先说说我的折腾故事:因为买了群晖,然后发现需要公网ip,但公网ip现在电信要钱了,开口100元一个月,挺黑的。没办法尝试了各种内网穿透,这类帖子网上很多,就不细说了,总之是各种折腾,各种不爽,最终选择了零遁伴侣做内网穿透还算稳定,速度也不错。…

    2022年6月13日
    157

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号