JDBC数据源
数据源: Data Source
JDBC中提供了javax.sql.DataSource接口,负责建立与数据库的连接
DataSource对象可以由Web服务器提供,前提是需要在服务器配置DataSource(包括连接池)
连接池:Connection Pool
将一些JDBC Connection对象,如水池般积蓄起来,在需要时之间可以直接从池中拿出使用,而不需即时创建
不使用连接池的缺点
每次数据库访问(哪怕只有一条SQL)都要独立获取一个数据库连接进行操作,最后再关闭,可以想见,对于一些复杂的业务方法而言,可能要频繁的数据库连接
对于JDBC Driver来说,连接数据库并非一件轻松的差事:
1.创建一个Socket Connection
2.验证用户名/密码,权限
3.数据库处理会话,记录联机日志
4.分配相应的处理进程和系统资源 数据库连接池的基本原理是在内部对象池中维护一定数量的数据库连接,并对外暴露
数据库连接池的基本原理是在内部对象池中维护一定数量的数据库连接,并对外暴露
连接池基本原理
预先建立一些连接对象放置于内存
当程序需要建立数据库连接时,只须从内存中取一个来用,用完后只需放回内存即可
连接的建立、断开都有连接池自身来管理
可以设置连接池中的连接数、每个连接的最大使用次数等参数
连接池的优点:
资源重用 (每次需要操作数据库时,连接数据库获取连接是一个非常浪费资源的操作)
新的资源分配手段 统一的连接管理,避免数据库连接泄漏
更快的系统响应速度
使用JDBC 连接数据库的步骤
在主程序(如Servlet、Beans)中建立数据库连接
进行SQL操作,取出数据
断开数据库连接
连接池同样也需要关闭,并不是关闭连接,而是把链接归还给连接池
一般一个工程只需要链接一个数据库
连接池开发步骤:
1.将数据库驱动与连接池jar包加载到工程中
2.初始化连接池对象DruidDataSource (数据库 驱动 用户名 密码)
3.获取池化的链接
4.进行数据库操作
5.关闭资源(当前的关闭资源指的是将数据库链接归还给连接池,而不是断开数据库链接)
import java.sql.Connection; import java.sql.SQLException; import java.sql.Statement; import com.alibaba.druid.pool.DruidDataSource; public class ConnectionTest { public static void main(String[] args) { //初始化连接池对象DruidDataSource (数据库 驱动 用户名 密码) DruidDataSource dds = new DruidDataSource(); dds.setUrl("jdbc:oracle:thin:@127.0.0.1:1521:TEST"); dds.setDriverClassName("oracle.jdbc.driver.OracleDriver"); dds.setUsername("scott"); dds.setPassword("root"); Connection connection = null; Statement statement = null; try { connection = dds.getPooledConnection().getConnection(); statement = connection.createStatement(); if(statement.executeUpdate("delete from student where stu_no='123456'")>0) { System.out.println("删除成功"); } } catch (SQLException e) { System.out.println("删除失败"); e.printStackTrace(); }finally { try { if(statement != null) { statement.close(); } if(connection != null) { connection.close(); } } catch (SQLException e) { e.printStackTrace(); } } } }