jdbc连接数据库(单例模式)

packagecom.test.test;
 
importjava.beans.PropertyVetoException;
importjava.io.Serializable;
importjava.sql.Connection;
importjava.sql.SQLException;
 
importcom.mchange.v2.c3p0.ComboPooledDataSource;
 
publicclassDBConnectionimplementsSerializable {
 
    privatestaticComboPooledDataSource dataSource =null;
 
    privatestaticclassDBConnectionHolder {
        finalstaticDBConnection INSTNACE =newDBConnection();
    }
 
    privateDBConnection() {
        System.out.println("DBConnection 私有构造方法...");
        dataSource =newComboPooledDataSource();
        try{
            dataSource.setDriverClass("com.mysql.jdbc.Driver");
        }catch(PropertyVetoException e) {
            e.printStackTrace();
        }
        dataSource.setJdbcUrl("jdbc:mysql://localhost:3306/test");
        dataSource.setUser("root");
        dataSource.setPassword("root");
 
        dataSource.setInitialPoolSize(20);
        dataSource.setMaxPoolSize(100);
        dataSource.setMinPoolSize(10);
        System.out.println("DBConnection配置完成!");
    }
 
    publicstaticDBConnection getInstance() {
        System.out.println("DBConnection getInstance()");
        returnDBConnectionHolder.INSTNACE;
    }
 
    publicConnection getConnection() {
        Connection conn =null;
        try{
            conn = dataSource.getConnection();
        }catch(SQLException e) {
            e.printStackTrace();
        }
        returnconn;
    }
 
    publicstaticvoidmain(String[] args)throwsException {
        longstart = System.currentTimeMillis();
        for(inti =0; i <100; i++) {
            Connection conn = DBConnection.getInstance().getConnection();
 
            conn.close();
        }
        longend = System.currentTimeMillis();
        System.out.println(end - start);
    }
}
 
2、
packagecom.test.jdbc;
 
importjava.io.Serializable;
importjava.sql.Connection;
importjava.sql.SQLException;
 
importorg.apache.commons.dbcp.BasicDataSource;
importorg.apache.commons.dbcp.DataSourceConnectionFactory;
 
publicclassDBConnectionimplementsSerializable {
 
    privatestaticBasicDataSource dataSource =null;
    privatestaticDataSourceConnectionFactory dataSourceFactory =null;
 
    privateDBConnection() {
        dataSource =newBasicDataSource();
        dataSource.setDriverClassName("com.mysql.jdbc.Driver");
        dataSource.setUrl("jdbc:mysql://localhost:3306/test");
        dataSource.setUsername("root");
        dataSource.setPassword("root");
 
        dataSource.setInitialSize(20);
        dataSource.setMaxActive(1000);
        dataSource.setMaxIdle(20);
        dataSource.setMinIdle(10);
 
        dataSourceFactory =newDataSourceConnectionFactory(dataSource);
    }
 
    privatestaticclassSingletonHolder {
        staticfinalDBConnection INSTANCE =newDBConnection();
    }
 
    publicstaticDBConnection getInstance() {
        System.out.println("I am getInstance()");
        returnSingletonHolder.INSTANCE;
    }
 
    publicConnection getConnection()throwsSQLException {
        returndataSourceFactory.createConnection();
    }
 
    publicstaticvoidmain(String[] args)throwsSQLException {
        longbegin = System.currentTimeMillis();
        for(inti =0; i <1000; i++) {
            Connection conn = DBConnection.getInstance().getConnection();
            conn.close();
        }
        longend = System.currentTimeMillis();
        System.out.println(end - begin);
    }
}



package com.daqing.jdbc;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

/**
 * 单例模式会有一个实例;会new一次
 * 单例模式不使用静态的
 * A0102JdbcUtilsSingletonRetard
 * 		意思:jdbc工具类,单例,延迟加载就是用到的时候再new
 * @author Administrator
 *
 */
public final class A0103JdbcUtilsSingletonRetard {

	private String url = "jdbc:mysql://127.0.0.1:3306/jdbc";
	private String user = "root";
	private String password = "root";
	
	/**
	 * 预初始化
	 */
	private static A0103JdbcUtilsSingletonRetard instance = null;
	
	private A0103JdbcUtilsSingletonRetard(){
	}
	
	/**
	 * 加锁模式,双重检查,防止重复的new
	 * @return
	 */
	public static A0103JdbcUtilsSingletonRetard getInstacce(){
		if(instance==null){
			synchronized (A0103JdbcUtilsSingletonRetard.class) {
				if(instance==null){
					instance = new A0103JdbcUtilsSingletonRetard();
				}
			}
		}
		return instance;
	}
	
	static {
		try {
			Class.forName("com.mysql.jdbc.Driver");
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
			throw new ExceptionInInitializerError(e);
		}
	}
	
	public Connection getConnection() throws SQLException{
		return DriverManager.getConnection(url, user, password);
	}
	
	public void free(ResultSet rs, PreparedStatement ps, Connection conn){
		try {
			if(rs!=null){
				rs.close();
			}
		} catch (SQLException e) {
			System.out.println("ResultSet关闭发生异常...");
		} finally {
			if(ps!=null){
				try {
					ps.close();
				} catch (SQLException e) {
					System.out.println("PreparedStatement关闭发生异常...");
				} finally {
					if(conn!=null){
						try {
							conn.close();
						} catch (SQLException e) {
							System.out.println("Connection关闭发生异常...");
						}
					}
				}
			}
		}
	}
}

package com.daqing.jdbc;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

/**
 * 单例模式会有一个实例;会new一次
 * 单例模式不使用静态的
 * A0102JdbcUtilsSingletonRetard
 * 		意思:jdbc工具类,单例,延迟加载就是用到的时候再new
 * @author Administrator
 *
 */
public final class A0103JdbcUtilsSingletonRetard {

	private String url = "jdbc:mysql://127.0.0.1:3306/jdbc";
	private String user = "root";
	private String password = "root";
	
	/**
	 * 预初始化
	 */
	private static A0103JdbcUtilsSingletonRetard instance = null;
	
	private A0103JdbcUtilsSingletonRetard(){
	}
	
	/**
	 * 加锁模式,双重检查,防止重复的new
	 * @return
	 */
	public static A0103JdbcUtilsSingletonRetard getInstacce(){
		if(instance==null){
			synchronized (A0103JdbcUtilsSingletonRetard.class) {
				if(instance==null){
					instance = new A0103JdbcUtilsSingletonRetard();
				}
			}
		}
		return instance;
	}
	
	static {
		try {
			Class.forName("com.mysql.jdbc.Driver");
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
			throw new ExceptionInInitializerError(e);
		}
	}
	
	public Connection getConnection() throws SQLException{
		return DriverManager.getConnection(url, user, password);
	}
	
	public void free(ResultSet rs, PreparedStatement ps, Connection conn){
		try {
			if(rs!=null){
				rs.close();
			}
		} catch (SQLException e) {
			System.out.println("ResultSet关闭发生异常...");
		} finally {
			if(ps!=null){
				try {
					ps.close();
				} catch (SQLException e) {
					System.out.println("PreparedStatement关闭发生异常...");
				} finally {
					if(conn!=null){
						try {
							conn.close();
						} catch (SQLException e) {
							System.out.println("Connection关闭发生异常...");
						}
					}
				}
			}
		}
	}
}

转载于:https://my.oschina.net/exit/blog/157899

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值