JDBC与连接池

文章介绍了JDBC的基本使用方法,包括DriverManager、Connection、Statement和ResultSet的关键概念,以及JDBC的使用流程。还详细讲解了数据库连接池的重要性,特别是C3P0连接池的配置和使用。
摘要由CSDN通过智能技术生成

一.JDBC入门使用

JDBC有四个核心API:DriverManager、Connection、Statement,和ResultSet。

DriverManager(驱动管理器):

作用:

1.注册驱动;

2.获得Connection连接

//注册驱动
//如果版本比较低Class.forNmae里传的类名是com.mysql.jdbc.Driver
Class.forName("com.mysql.cj.jdbc.Driver");
//获得连接对象
//参数分别是url,username,password
Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/demo","root","root");

Connecton(连接对象):

Connection对象表示连接,Connection对象不为空表示与数据库建立了连接

Connection是用来获取Statement对象的

//获取Statement对象
Statement stm = con.createStatement();

Statement(执行对象):

用来向数据库发送SQL语句,数据库会执行Statement发送过来的SQL语句。

主要方法:

void executeUpdate(String sql):执行更新操作(insert、update、delete等)

ResultSet executeQuery(String sql):执行查询操作,数据库在执行查询后会把查询结果,查询结果就是ResultSet;

ResultSet(结果集):

ResultSet对象表示查询结果集,只有在执行查询操作后才会有结果集的产生。结果集是一个二维的表格,有行有列。操作结果集要学习移动ResultSet内部的“行光标”,以及获取当前行上的每一列上的数据:

主要方法:

boolean next():使“行光标”移动到下一行,并返回移动后的行是否存在;

XXX getXXX(int col):获取当前行指定列上的指定类型的值,参数就是列数,列数从1开始,而不是0。

二:JDBC使用流程

1.导入jar包

在idea中导入mysql的驱动jar: mysql-connector-j-8.2.0.jar

首先在当前项目下建立lib目录

将mysql-connector-j-8.2.0.jar拷贝到lib目录

把mysql-connector-j-8.2.0.jar作为第三方库

至此,jar包就导入完成了

2.注册驱动:

Class.forName("com.mysql.cj.jdbc.Driver");

3.获取Connection连接对象

Connection con =DriverManager.getConnection("jdbc:mysql://localhost:3306/demo","root","root");

4.获取Statement执行对象

Statement stm = conn.createStatement();

5.执行SQL语句,返回结果

 String sql = "SELECT * FROM emp";
 ResultSet rs= stm.executeQuery(sql);

6.处理结果

List<Emp> empList =new ArrayList();
//这里封装了一个Emp的实体类
           while(rs.next()){
               Emp emp = new Emp();
               //从结果集获取每行的数据,即Emp对象各个字段的值
               emp.setSal(rs.getBigDecimal("sal"));
               emp.setCommn(rs.getBigDecimal("comm"));
               emp.setHiredate(rs.getDate("hiredate"));
               emp.setEmpno(rs.getInt("empno"));
               emp.setDeptno(rs.getInt("deptno"));
               emp.setName(rs.getString("ename"));
               emp.setJob(rs.getString("job"));
               //将每行数据对应的Emp对象加入集合
               empList.add(emp);
           }
           //遍历输出所有数据
           for(Emp emp:empList){
               System.out.println(emp);
           }

7.释放资源


rs.close();
if(stm!=null){
                try {
                    stm.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
if(con!=null){
                try {
                    con.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }

三:连接池

1.什么是连接池:

连接池简单理解就是一个池子,在这个池子里放有一定数量的连接,当需要建立数据库连接时,就从连接池里取出一个连接,用完之后再放回连接池,连接池负责建立连接,管理连接和释放连接。

2.为什么要使用连接池

(1)普通的JDBC数据库连接使用 DriverManager 来获取,每次向数据库建立连接的时候都要将 Connection加载到内存中,再验证用户名和密码(得花费0.05s~1s的时间)。需要数据库连接的时候,就向数据库要求一个,执行完成后再断开连接。这样的方式将会消耗大量的资源和时间。数据库的连接资源并没有得到很好的重复利用。若同时有几百人甚至几千人在线,频繁的进行数据库连接操作将占用很多的系统资源,严重的甚至会造成服务器的崩溃。
(2)对于每一次数据库连接,使用完后都得断开。否则,如果程序出现异常而未能关闭,将会导致数据库系统中的内存泄漏,最终将导致重启数据库。(回忆:何为Java的内存泄漏?)
(3)这种开发不能控制被创建的连接对象数,系统资源会被毫无顾及的分配出去,如连接过多,也可能导致内存泄漏,服务器崩溃。
 

3.开源数据库连接池

(1)DBCP 是Apache提供的数据库连接池。tomcat服务器自带dbcp数据库连接池。速度相对c3p0较快,但因自身存在BUG,Hibernate3已不再提供支持。

(2)C3P0 是一个开源组织提供的一个数据库连接池,速度相对较慢,稳定性还可以,hibernate官方推荐使用。

(3)Proxool 是sourceforge下的一个开源项目数据库连接池,有监控连接池状态的功能,稳定性较c3p0差一点.

(4)BoneCP 是一个开源组织提供的数据库连接池,速度快。

(5)Druid 是阿里提供的数据库连接池,据说是集DBCP 、C3P0 、Proxool优点于一身的数据库连接池,但是速度不确定是否有BoneCP快。
 

这里只展示c3p0的使用

4.c3p0连接池的使用:

1.在lib导入c3p0的jar包

c3p0-0.9.5.2.jar

c3p0-oracle-thin-extras-0.9.5.2.jar

mchange-commons-java-0.2.11.jar

跟导入驱动包的流程一致

2.在src下写c3p0配置文件:

注意:配置文件名一定要为c3p0-config.xml

配置文件内容为:

<?xml version="1.0" encoding="UTF-8"?>
<c3p0-config>
	<named-config name="mysql">
		<!-- 获取连接的4个基本信息 -->
		<property name="user">root</property>
		<property name="password">abc123</property>
		<property name="jdbcUrl">jdbc:mysql:///test</property>
		<property name="driverClass">com.mysql.jdbc.Driver</property>
		
		<!-- 涉及到数据库连接池的管理的相关属性的设置 -->
		<!-- 若数据库中连接数不足时, 一次向数据库服务器申请多少个连接 -->
		<property name="acquireIncrement">5</property>
		<!-- 初始化数据库连接池时连接的数量 -->
		<property name="initialPoolSize">5</property>
		<!-- 数据库连接池中的最小的数据库连接数 -->
		<property name="minPoolSize">5</property>
		<!-- 数据库连接池中的最大的数据库连接数 -->
		<property name="maxPoolSize">10</property>
		<!-- C3P0 数据库连接池可以维护的 Statement 的个数 -->
		<property name="maxStatements">20</property>
		<!-- 每个连接同时可以使用的 Statement 对象的个数 -->
		<property name="maxStatementsPerConnection">5</property>

	</named-config>

   <named-config name="oracle"> 
      
   </named-config>  


</c3p0-config>

可以在配置文件中写入多个数据库配置文件,使用时根据name字段决定使用哪个数据库的配置。

3.获取ComboPooledDataSource对象:

 ComboPooledDataSource ds = new ComboPooledDataSource("mysql");
        Connection con = ds.getConnection();
        if(con!=null){
            System.out.println("连接成功");
            con.close();
        }

本文连接池参考连接:JAVA之JDBC数据库连接池(超详细介绍)_java的数据库连接池-CSDN博客

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值