java数据库连接池原理,代码实现

数据库连接池,话不多说,上代码,代码解释连接池原理,看着代码就懂了

自建连接池核心类哈!

package com.zkb.jdbctest;

import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.LinkedList;

import javax.sql.DataSource;

public class MyDataPool implements DataSource {//首先要来实现这DataSource接口
	
	private LinkedList
   
   
    
     linkedList = new LinkedList
    
    
     
     ();
	private static String driver = "com.mysql.jdbc.Driver";//数据库驱动
	private static String dbUrl = "jdbc:mysql://localhost:3306/userdb";//数据库服务地址
    private static String dbUserName ="root";//用户名
    private static String dbPassWord ="root";//密码
	 //初始化连接数量  
    public MyDataPool() {  
           for(int i = 0; i < 10; i++) {  
                  try {  
                	 Class.forName(driver);
                     Connection con =DriverManager.getConnection(dbUrl, dbUserName, dbPassWord);  
                     linkedList.add(con); 
                     System.out.println(i+"条已被创建,放入了连接池");  
                  } catch (Exception e) {
                     e.printStackTrace();  
                  }  
           }  
    }  
    @Override
	public Connection getConnection() throws SQLException {
		// TODO Auto-generated method stub
		final Connection conn = linkedList.removeFirst();  
        System.out.println("有人已经获取了一条连接,还剩"+linkedList.size()+"条");  
		return conn;
	}
    //这里为释放掉连接
    public void releaseConn(Connection con) {  
    	linkedList.add(con);  //借了就得还给我啊
    	System.out.println("有人归还了连接,此时空闲连接为"+linkedList.size()+"条");
    }  
	@Override
	public Connection getConnection(String username, String password)
			throws SQLException {
		// TODO Auto-generated method stub
		return null;
	}
    
	@Override
	public PrintWriter getLogWriter() throws SQLException {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public int getLoginTimeout() throws SQLException {
		// TODO Auto-generated method stub
		return 0;
	}

	@Override
	public void setLogWriter(PrintWriter arg0) throws SQLException {
		// TODO Auto-generated method stub

	}

	@Override
	public void setLoginTimeout(int arg0) throws SQLException {
		// TODO Auto-generated method stub

	}

	@Override
	public boolean isWrapperFor(Class
     
      arg0) throws SQLException {
		// TODO Auto-generated method stub
		return false;
	}

	@Override
	public 
     
     
      
       T unwrap(Class
      
      
       
        arg0) throws SQLException {
		// TODO Auto-generated method stub
		return null;
	}
}
package com.zkb.jdbctest;

import java.sql.ResultSet;
import java.sql.SQLException;

import com.mysql.jdbc.Connection;
import com.mysql.jdbc.Statement;

public class TestPool {

	/**
	
	 * 
	 */
	public static void main(String[] args) throws SQLException {
		   MyDataPool dataSource = new MyDataPool();
		   Connection conn =(Connection) dataSource.getConnection();       
	       Statement state =(Statement) conn.createStatement();             
	       ResultSet result =state.executeQuery("select * from userinfo");             
	       while(result.next()){  
	              System.out.println(result.getString("id")+"\t"+result.getString("username")+"\t"+result.getString("password"));  
	       }              
	       result.close();//结果集没得说关掉!!!  
	       state.close();  //用于执行静态 SQL 语句并返回它所生成结果的对象。关掉!!!
	       dataSource.releaseConn(conn);//连接就不要关了,还给连接池 
	}
}
	DROP TABLE IF EXISTS `userinfo`;
		CREATE TABLE `userinfo` (
		  `id` int(8) NOT NULL auto_increment,
		  `username` varchar(20) NOT NULL,
		  `password` varchar(20) default NULL,
		  PRIMARY KEY  (`id`)
		) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=latin1;
		
		-- ----------------------------
		-- Records of userinfo
		-- ----------------------------
		INSERT INTO `userinfo` VALUES ('1', 'admin', 'admin');
		INSERT INTO `userinfo` VALUES ('2', 'user', 'user');
		INSERT INTO `userinfo` VALUES ('3', 'pass', 'pass');
      
      
     
     
    
    
   
   


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
数据库连接池是一种技术,它可以在应用程序启动时创建一些数据库连接,并将这些连接保存在池中,以便需要时可以重复使用这些连接,从而提高应用程序的性能。 数据库连接池的基本原理如下: 1. 在应用程序启动时,创建一定数量的数据库连接。 2. 将这些连接保存在池中,并记录每个连接的状态。 3. 当应用程序需要连接数据库时,从连接池中获取一个可用连接。 4. 在使用完连接后,将连接放回连接池中,以供下次使用。 使用数据库连接池可以提高应用程序的性能,避免不必要的连接创建和销毁。通常情况下,连接池的大小应该根据应用程序的实际情况进行调整,以确保连接池中始终有足够的连接可供使用。 常见的数据库连接池有:C3P0、DBCP、Druid等。其中,Druid是一个非常优秀的连接池,支持多种数据库,性能优异,使用也比较简单。下面是一个使用Druid连接池的示例代码: ```java // 创建Druid连接池 DruidDataSource dataSource = new DruidDataSource(); dataSource.setDriverClassName("com.mysql.jdbc.Driver"); dataSource.setUrl("jdbc:mysql://localhost:3306/test"); dataSource.setUsername("root"); dataSource.setPassword("123456"); // 获取数据库连接 Connection connection = dataSource.getConnection(); // 使用连接执行SQL语句 Statement statement = connection.createStatement(); ResultSet resultSet = statement.executeQuery("SELECT * FROM user"); // 关闭连接 resultSet.close(); statement.close(); connection.close(); ``` 在上面的示例代码中,我们首先创建了一个Druid连接池,并设置了连接的参数。然后,通过调用getConnection()方法获取一个数据库连接,并使用这个连接执行SQL语句。最后,我们需要关闭连接以释放资源。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

斗码士

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值