JDBC中的那些设计模式
一、单例模式获取数据库连接
1、关于单例模式的定义
保证一个类仅有一个实例,并提供访问它的全局访问点。Java里面实现的单例是一个虚拟机的范围。因为装载类的功能时虚拟机,所以一个虚拟机在听过自己的Classload装载饿汉式实现单例类的时候就会创建一个类的实例。单例的实质是:控制实例的数目 。负责创建Singleton类自己唯一实例,并提供一个getInstance的方法,让外部来访问这个类的唯一实例。
2、单例模式的分类
懒汉式会一直等到马上要使用实例的时候才创建,是典型的时间换空间。饿汉式在装载类的时候就创建对象实例,典型的空间换时间。
3、单例模式实现的步骤
- 私有化构造方法
private Singleton(){} - 定义存储实例的属性
//static 懒汉式为了在静态方法中使用
//static 饿汉式 在类装载的时候进行初始化,多个实例的static变量会共享同一块内存区域
private static Singleton singleton=null; - 提供获取实例的静态方法
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中的那些设计模式的更多相关文章
- java面试题之----jdbc中使用的设计模式(桥接模式)
1.JDBC(JavaDatabase Connectivity) JDBC是以统一方式访问数据库的API. 它提供了独立于平台的数据库访问,也就是说,有了JDBC API,我们就不必为访问Oracl ...
- 一、DAO设计模式 二、DAO设计模式的优化 三、JDBC中的事务,连接池的使用
一.DAO设计模式概述###<1>概念 DAO,Data Access Object ,用于访问数据库的对象. 位于业务逻辑和数据持久化层之间,实现对数据持久化层的访问 ...
- 第80节:Java中的MVC设计模式
第80节:Java中的MVC设计模式 前言 了解java中的mvc模式.复习以及回顾! 事务,设置自动连接提交关闭. setAutoCommit(false); conn.commit(); conn ...
- Java基础-Java中23种设计模式之常用的设计模式
Java基础-Java中23种设计模式之常用的设计模式 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.设计模式分类 设计模式是针对特定场景给出的专家级的解决方案.总的来说设 ...
- spring 中常用的设计模式
一. Spring 中常见的设计模式 工厂模式 : BeanFactory 装饰器模式: BeanWrapper 代理模式: AopProxy 单例模式: ApplicationContext 委派模 ...
- JDBC中的Statement和PreparedStatement的区别
JDBC中的Statement和PreparedStatement的区别
- [转]JDBC中日期时间的处理技巧
Java中用类java.util.Date对日期/时间做了封装,此类提供了对年.月.日.时.分.秒.毫秒以及时区的控制方法,同时也提供一些工具方法,比如日期/时间的比较,前后判断等. java.uti ...
- ios项目总结一:开发中常用的设计模式
一.单例设计模式 1.应用场景: 程序运行期间,在内存中只有一个实例存在,主要用于资源共享,对硬件的访问等等 2.优点: 跨模块,解耦合,使用简单 3.敏捷原则: 单一职责原则 4.SDK实例: UI ...
- JDBC中的事务-Transaction
事务-Transaction 某些情况下我们希望对数据库的某一操作要么整体成功,要么整体失败,经典的例子就是支付宝提现.例如我们发起了支付宝到银行卡的100元提现申请,我们希望的结果是支付宝余额减少1 ...
随机推荐
- DrangonBorns
团队介绍 团队名称:DrangonBorns(龙裔) 团队博客:http://www.cnblogs.com/DragonBorns/ 团队队长:蒲建国 队长博客链接:htt ...
- 4-Python3从入门到实战—基础之数据类型(字符串-String)
Python从入门到实战系列--目录 字符串表示 在 Python 3版本中,字符串是以 Unicode 编码的:Python 中使用 ' '或者" "表示字符串 msg = 'H ...
- Minify or format javascript file by web or notepad++
Notepad++ plugin manager install 'JSTOOL' http://tool.oschina.net/codeformat/js https://www.cnblogs. ...
- Oracle18c OnlyExadataVersion 安装说明
1.根据惜分飞还有盖国强老师云和恩墨的文章, 验证了下OnlyExadataVersion的Oracle18c的数据库安装过程. 2.oracle参数修改以及创建用户, 目录, 修改.bash_pro ...
- Python表达式与运算符
表达式与运算符 Python语言支持以下类型的运算符: 算术运算符 比较(关系)运算符 赋值运算符 逻辑运算符 位运算符 成员运算符 身份运算符 运算符优先级 算术运算符 运算符 描述 + 加 - 两 ...
- grep 匹配打印的上下几行
如果在只是想匹配模式的上下几行,grep可以实现. $grep -5 'parttern' inputfile //打印匹配行的前后5行 $grep -C 5 'parttern' input ...
- Python——多进程
进程的实例 # -*- coding:UTF-8 -*- import os import time from multiprocessing import Process #进程 def func( ...
- CSS实现水平垂直同时居中的6种思路
前面的话 水平居中和垂直居中已经单独介绍过,本文将介绍水平垂直同时居中的6种思路 水平对齐+行高 [思路一]text-align + line-height实现单行文本水平垂直居中 <style ...
- caffe中的lr_policy
// The learning rate decay policy. The currently implemented learning rate // policies are as follow ...
- codeforces278A
Circle Line CodeForces - 278A 郑州地铁的圆线有n个车站. 我们知道所有邻近站点之间的距离: d[1]是第1站和第2站之间的距离;d[2]是第2站和第3站之间的距离;… d ...