一、单例模式获取数据库连接

1、关于单例模式的定义

保证一个类仅有一个实例,并提供访问它的全局访问点。Java里面实现的单例是一个虚拟机的范围。因为装载类的功能时虚拟机,所以一个虚拟机在听过自己的Classload装载饿汉式实现单例类的时候就会创建一个类的实例。单例的实质是:控制实例的数目 。负责创建Singleton类自己唯一实例,并提供一个getInstance的方法,让外部来访问这个类的唯一实例。

2、单例模式的分类

懒汉式会一直等到马上要使用实例的时候才创建,是典型的时间换空间。饿汉式在装载类的时候就创建对象实例,典型的空间换时间。

3、单例模式实现的步骤

  1. 私有化构造方法

    private Singleton(){}
  2. 定义存储实例的属性
    //static 懒汉式为了在静态方法中使用
    //static 饿汉式 在类装载的时候进行初始化,多个实例的static变量会共享同一块内存区域
    private static Singleton singleton=null;
  3. 提供获取实例的静态方法
    public static Singleton getInstance(){
    return singleton;

4、模板实现

懒汉式的实现:

package SingletonPattern;

public class LazySingleton {
//1、定义一个变量来存储类实例
private static LazySingleton uniqueInstance=null;
//2、私有化构造方法,可以在内部类控制创建实例的项目
private LazySingleton(){}
//3、定义一个方法为客户端提供类实例
public static synchronized LazySingleton getInstance(){
//判断存储实例的变量是否有值
//延迟加载:一开始不要加载资源和数据,一直等到马上用这个资源或者数据了,才加载
//缓存的思想:一种典型的空间换时间的方案。
if(uniqueInstance==null){
//如果没有,就创建一个实例,并把值赋值给存储类实例的变量
uniqueInstance=new LazySingleton();
}
//如果有值,那就直接使用
return uniqueInstance;
}
}

饿汉式实现

package SingletonPattern;

public class HungarySingleton {
//1、定义一个变量来存储创建好的类实例,直接在这里创建实例,只能创建一次
private static HungarySingleton uniqueInstance=new HungarySingleton();
//2、私有化构造方法,可以在内部类控制创建实例的项目
private HungarySingleton(){}
//3、定义一个方法为客户端提供类实例
public static HungarySingleton getInstance(){
//直接使用创建好的实例
return uniqueInstance;
}
}

5、JDBC连接实例挑战

package com.lyjs.jdbcTools;

import java.io.InputStream;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;
import javax.sql.DataSource; import org.apache.commons.dbcp.BasicDataSourceFactory; public final class JdbcUtils {
//单列模式
private JdbcUtils(){}
private static DataSource myDataSource=null;
//声明实例
private JdbcUtils jdbcUtils =new JdbcUtils();
public JdbcUtils getJdbcUtils(){
return jdbcUtils;
}
static{
try {
Class.forName("com.mysql.jdbc.Driver");
//加载dbcp配置文件
Properties prop=new Properties();
InputStream is=JdbcUtils.class.getClassLoader().getResourceAsStream("dbcpconfig.properties");
prop.load(is);
//创建连接池
myDataSource=BasicDataSourceFactory.createDataSource(prop);
} catch (Exception e) {
e.printStackTrace();
throw new ExceptionInInitializerError();
}
} //获取数据源
public DataSource getDataSource(){
return myDataSource;
}
//获取链接
public Connection getConnection(){
try {
return myDataSource.getConnection();
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
//关闭连接
public void free(ResultSet rs, Statement st, Connection conn) {
try {
if (rs != null) {
rs.close();
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
try {
if (st != null) {
st.close();
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
try {
if (conn != null)
conn.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
}

JDBC中的那些设计模式的更多相关文章

  1. java面试题之----jdbc中使用的设计模式(桥接模式)

    1.JDBC(JavaDatabase Connectivity) JDBC是以统一方式访问数据库的API. 它提供了独立于平台的数据库访问,也就是说,有了JDBC API,我们就不必为访问Oracl ...

  2. 一、DAO设计模式 二、DAO设计模式的优化 三、JDBC中的事务,连接池的使用

    一.DAO设计模式概述###<1>概念 DAO,Data Access Object ,用于访问数据库的对象. 位于业务逻辑和数据持久化层之间,实现对数据持久化层的访问![](1.png) ...

  3. 第80节:Java中的MVC设计模式

    第80节:Java中的MVC设计模式 前言 了解java中的mvc模式.复习以及回顾! 事务,设置自动连接提交关闭. setAutoCommit(false); conn.commit(); conn ...

  4. Java基础-Java中23种设计模式之常用的设计模式

    Java基础-Java中23种设计模式之常用的设计模式 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任.   一.设计模式分类 设计模式是针对特定场景给出的专家级的解决方案.总的来说设 ...

  5. spring 中常用的设计模式

    一. Spring 中常见的设计模式 工厂模式 : BeanFactory 装饰器模式: BeanWrapper 代理模式: AopProxy 单例模式: ApplicationContext 委派模 ...

  6. JDBC中的Statement和PreparedStatement的区别

    JDBC中的Statement和PreparedStatement的区别  

  7. [转]JDBC中日期时间的处理技巧

    Java中用类java.util.Date对日期/时间做了封装,此类提供了对年.月.日.时.分.秒.毫秒以及时区的控制方法,同时也提供一些工具方法,比如日期/时间的比较,前后判断等. java.uti ...

  8. ios项目总结一:开发中常用的设计模式

    一.单例设计模式 1.应用场景: 程序运行期间,在内存中只有一个实例存在,主要用于资源共享,对硬件的访问等等 2.优点: 跨模块,解耦合,使用简单 3.敏捷原则: 单一职责原则 4.SDK实例: UI ...

  9. JDBC中的事务-Transaction

    事务-Transaction 某些情况下我们希望对数据库的某一操作要么整体成功,要么整体失败,经典的例子就是支付宝提现.例如我们发起了支付宝到银行卡的100元提现申请,我们希望的结果是支付宝余额减少1 ...

随机推荐

  1. DrangonBorns

    团队介绍 团队名称:DrangonBorns(龙裔)      团队博客:http://www.cnblogs.com/DragonBorns/     团队队长:蒲建国     队长博客链接:htt ...

  2. 4-Python3从入门到实战—基础之数据类型(字符串-String)

    Python从入门到实战系列--目录 字符串表示 在 Python 3版本中,字符串是以 Unicode 编码的:Python 中使用 ' '或者" "表示字符串 msg = 'H ...

  3. Minify or format javascript file by web or notepad++

    Notepad++ plugin manager install 'JSTOOL' http://tool.oschina.net/codeformat/js https://www.cnblogs. ...

  4. Oracle18c OnlyExadataVersion 安装说明

    1.根据惜分飞还有盖国强老师云和恩墨的文章, 验证了下OnlyExadataVersion的Oracle18c的数据库安装过程. 2.oracle参数修改以及创建用户, 目录, 修改.bash_pro ...

  5. Python表达式与运算符

    表达式与运算符 Python语言支持以下类型的运算符: 算术运算符 比较(关系)运算符 赋值运算符 逻辑运算符 位运算符 成员运算符 身份运算符 运算符优先级 算术运算符 运算符 描述 + 加 - 两 ...

  6. grep 匹配打印的上下几行

    如果在只是想匹配模式的上下几行,grep可以实现.   $grep -5 'parttern' inputfile //打印匹配行的前后5行   $grep -C 5 'parttern' input ...

  7. Python——多进程

    进程的实例 # -*- coding:UTF-8 -*- import os import time from multiprocessing import Process #进程 def func( ...

  8. CSS实现水平垂直同时居中的6种思路

    前面的话 水平居中和垂直居中已经单独介绍过,本文将介绍水平垂直同时居中的6种思路 水平对齐+行高 [思路一]text-align + line-height实现单行文本水平垂直居中 <style ...

  9. caffe中的lr_policy

    // The learning rate decay policy. The currently implemented learning rate // policies are as follow ...

  10. codeforces278A

    Circle Line CodeForces - 278A 郑州地铁的圆线有n个车站. 我们知道所有邻近站点之间的距离: d[1]是第1站和第2站之间的距离;d[2]是第2站和第3站之间的距离;… d ...