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

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. K 班前7次作业成绩汇总

    K 班前7次作业成绩汇总 得分榜 千帆竞发 详细 短学号 名 1 2 3 4 5 6 7 TOTAL 505 基智 4.55 1 -2 0 0 -10 4.37 -2.08 414 圳源 5.43 2 ...

  2. Spring.Net快速入门:控制翻转、依赖注入、面向切面编程

    Spring.Net主要功能: 1.IoC:控制翻转(Inversion of Control)  理解成抽象工厂翻转控制:就是创建对象的权利由开发人员自己控制New,转到了由容器来控制. 2.DI: ...

  3. 『编程题全队』Beta 阶段冲刺博客三

    1.提供当天站立式会议照片一张 2.每个人的工作 (有work item 的ID) (1) 昨天已完成的工作 孙志威: 1.添加登录框的功能 2.修改登录框的UI 孙慧君: 1.提醒显示UI设计: 2 ...

  4. OSI的七层模型介绍

    应用层: 文件传输,电子邮件,文件服务,虚拟终端 TFTP,HTTP,SNMP,FTP,SMTP,DNS,Telnet 表示层: 数据格式化,代码转换,数据加密 没有协议. (信息的语法语义以及它们的 ...

  5. FuelPHP 系列(五) ------ Security 防御

    项目中难免会有 form 提交,对用户输入的所有信息进行过滤,可以避免 XSS 攻击,防止 SQL 注入. 一.设置配置信息 首先在 config.php 文件中,对 security 相关信息进行设 ...

  6. Node http请求信息

    //1:加载http模块 httpconst http = require("http");//2:创建http 服务器var server = http.createServer ...

  7. width() 、 height() 方法;innerWidth() 、innerHeight() 方法;outerWidth() 、 outerHeight() 方法的区别

    1.width() . height() 方法 设置或返回元素的宽度.高度(不包括内边距.边框或外边距): 2.innerWidth() .innerHeight() 方法 返回元素的宽度.高度(包括 ...

  8. Java_常用工具类收集

    一.日期工具类 package com.ebd.application.common.utils; import java.sql.Timestamp; import java.text.DateFo ...

  9. VMware配置Linux虚拟机访问外网

    [虚拟机版本] 系统版本 : Centos 6.8 [连接方法] 网络模式:桥接模式 ps:本人比较喜欢用桥接,直接NAT也是可以的 [配置步骤] 1.配置网卡 #配置命令 vi /etc/sysco ...

  10. POJ1860(Currency Exchange)

    题意: 给出一张各种货币交换的网络,问在网络中交换原有的货币,问货币能否增值? 解析: 判断是否存在正环即可  用spfa  负环和正环的判定方法一样  如果一个点的进队次数超过n次 则存在环 代码如 ...