浅谈JDBC和数据库连接池
一、JDBC的概念
JDBC,全称"Java Database Connectivity",意为"java与数据库的连接",是java中用来规范客户端程序如何来访问数据库的应用程序接口,提供了诸如查询和更新数据库中数据的方法。jdbc接口的具体方法由各大数据库厂商去实现,即数据库驱动,开发人员无需理会具体实现方法,只需学会调用相应接口的方法即可。
要使用jdbc,需要导入相应数据库的驱动包
二、JDBC使用步骤
-
导入要操作的数据库的驱动包
-
加载、注册数据库驱动(以mysql数据库为例)
Class.forName("com.mysql.jdbc.Driver");
-
获取jdbc与数据库的连接对象
Connection conn = DriverManager.getConnection(url,username,password);//url是数据库地址
-
创建执行sql语句的对象(负责把sql语句送到数据库去给数据库编译)
- statement对象 (不安全,有sql注入风险)
Statement st = conn.createStatement();
2.preparedStatement对象 (安全,用得较多)
PreparedStatement pst = conn.prepareStatement(String sql);//预编译 sql语句待传参数用占位符?替换
-
处理结果
-
statement对象
int num = st.executeUpdate(String sql);//执行增删改方法,返回数据库受影响行数 ResultSet rs = st.executeQuery(String sql);//执行查询方法,放回查询结果 ResultSet是链表结构
-
preparedStatement对象
String sql = "selet * from user where id = ?"; pst.setInt(1,20);//第一个参数表示给第一个?传值,第二个参数表示具体值 int num =pst.executeUpdate()//执行增删改方法,返回数据库受影响行数 注意,括号内不能传参数 ResultSet rs = st.executeQuery(String sql);//执行查询方法,放回查询结果 ResultSet是链表结构
-
-
释放jdbc对象的连接 (顺序和创建时刚好相反)
rs.close(); pst.close(); conn.close();
三、数据库连接池
传统应用中每个用户想要操作数据库,都需要建立一个与数据库的连接,操作完毕之后再断开连接,这对于系统开销其实是很大的,数据库连接池便应运而生。"数据库连接池负责分配、管理和释放数据库连接,它允许应用程序重复使用一个现有的数据库连接,而不是再重新建立一个"这是百度百科给的概念。通俗来讲,可以理解为程序创建了一个池子,然后事先创建了很多connection对象,放在这个池子里面,当用户需要时直接从池子中取,使用完释放连接时并不销毁这个connection对象,而是把它放回连接池里,以供其他用户使用这样可以大大节省系统资源的开销,提高系统性能。
数据库连接池底层是实现了一个叫DataSource的接口。 用户可以自定义连接池的最大连接数和最小连接数、超时等待时间等属性,不设置则采用默认值。当连接供不应求(也就是请求连接数大于池子中连接总数)时,用户需要排队等待。
如今流行的数据库连接池技术有很多,主流的有Druid(阿里的),HiKariCP(号称性能最好),dbcp(apache出品),c3p0。