在用JDBC连接数据库的时候,需要创建对数据库的连接,这样才能执行后续的操作。然而,这样做有两个问题:
- 数据库允许的连接个数有限
- 创建连接的过程需要消耗内存和时间
所以,JDBC引入了连接池的概念。也就是说,连接池里面维护着一些对数据的连接对象,我们的代码需要的时候直接拿来用就可以了,这样就不必每次需要对数据库连接的时候再新建Connection对象,节省时间空间,从而提高软件质量。(eg. Apache就维护了一个连接池,让我们的web 程序能够方便的使用)
这里我们使用Apache的开源组件DBCP连接池。DBCP连接池通过一个DasicDataSource对象来实现连接池的管理。DBCP可以从commons.apache.org官方网站下载,它包括三个JAR包。
常用接口如下:
示例代码:
import java.sql.Connection; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import org.apache.commons.dbcp2.BasicDataSource; public class Hello { static final String JDBC_DRIVER = "com.mysql.jdbc.Driver"; static String DB_URL = "jdbc:mysql://localhost:3306/mldn"; static final String USERNAME = "root"; static final String PASSWORD = "admin"; static BasicDataSource bds = null; public static void dbPoolInit() { bds = new BasicDataSource(); bds.setUrl(DB_URL); bds.setDriverClassName(JDBC_DRIVER); bds.setUsername(USERNAME); bds.setPassword(PASSWORD); } public static void main(String a[]) { Connection conn = null; Statement stmt = null; ResultSet rs = null; Hello.dbPoolInit(); try { conn = bds.getConnection(); stmt = conn.createStatement(); rs = stmt.executeQuery("SELECT name FROM user;"); while(rs.next()) { System.out.println("Hello " + rs.getString("name")); } } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } finally { try { conn.close(); stmt.close(); rs.close(); bds.close(); } catch(Exception e) { //ignore all exceptions when closing. } } System.out.println("///Done~~"); } } |