
传统方式和连接池方式
传统方式的步骤
使用传统方式在Java中使用JDBC连接数据库,完成一次数据库的操作,一般有以下几个步骤:
1. 加载驱动。
2. 建立连接。
3. 执行SQL语句。
4. 释放连接。
5. 传统方式的弊端
每一次对数据库的操作都要建立一次连接,并且会将得到的Connection对象加载到内存中,导致消耗了大量的内存和时间。如果短时间有很多需要进行建立连接的操作,会导致占用很多系统资源,甚至会导致服务器崩溃。
同建立连接相对应,每次使用都需要手动释放连接,如果忘记释放连接或者程序出现异常未能成功释放,会导致内存泄露。
此外,传统方式并不能控制连接的数量,如果连接的人数过多,会导致无限制的创建连接对象,导致内存开销过大,服务器崩溃。
(推荐视频:java视频教程)
连接池的步骤
1. 创建连接池并配置连接属性。
2. 使用连接池获取连接。
连接池的优势
每次需要连接数据库时,不需要建立连接,而是通过连接池获取,由连接池提供连接。
在使用完连接后,不需要手动释放连接,而是交由连接池释放连接。
可以通过连接池控制连接的数量,在连接池里的连接可多次重复使用,避免了无限制创建连接的问题。
使用连接池
使用C3P0数据库连接池
导入jar包:
c3p0-0.9.5.2.jar
在当前项目的代码根目录 src 下新建名为 c3p0-config.xml 的配置文件,注意文件名称不可改变,内容如下:
<c3p0-config> <!-- 连接名称 --> <named-config> <!-- 接数据库的驱动类名 --> <property>com.mysql.jdbc.Driver</property> <!-- 连接属性 --> <property>jdbc:mysql://192.168.35.128:3306/demo</property> <property>root</property> <property>123456</property> <!-- 当连接池用完时等待获取新连接的时间,超时后将抛出SQLException,单位毫秒,如设为0则无限期等待。默认为0。 --> <property>5000</property> <!-- 当连接用尽后,一次获取的连接个数 --> <property>2</property> <!-- 初始连接数 --> <property>1</property> <!-- 最小连接数 --> <property>3</property> <!-- 最大连接数 --> <property>5</property> </named-config></c3p0-config>
程序代码:
public class TestDataPool {
// 根据配置文件里的名称创建连接池
public static ComboPooledDataSource cpds = new ComboPooledDataSource("mysql");
/**
* 主程序
*/
public static void main(String[] args) {
// 模拟多次对数据库的查询操作
for (int i = 0; i <p>使用DBCP数据库连接池</p><p>导入jar包:</p><pre class="brush:php;toolbar:false"> commons-dbcp-1.4.jar2 commons-pool-1.5.5.jar
在当前项目的代码根目录 src 下新建名为 dbcp.properties 的配置文件,文件名需要同代码中引用的文件名一致,内容如下:
# 接数据库的驱动类名 driverClassName=com.mysql.jdbc.Driver # 连接属性 url=jdbc:mysql://192.168.35.128:3306/demo username=root password=123456 # 初始化连接数 initialSize=10 # 最大连接数 maxActive=15
程序代码:
public class TestDBCP {
// 根据配置文件里的名称创建连接池
private static DataSource source = null;
static {
Properties pros = new Properties();
InputStream is = TestDBCP.class.getClassLoader().getResourceAsStream("dbcp.properties");
try {
pros.load(is);
source = BasicDataSourceFactory.createDataSource(pros);
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 主程序
*/
public static void main(String[] args) {
// 模拟多次对数据库的查询操作
for (int i = 0; i
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











