JDBC单例模式

作者: 小小蒜头 | 来源:发表于2017-09-17 17:21 被阅读7次
  1. JdbcUtilsSingle 工具类
package com.chinasofti.jdbc;

import java.sql.*;

/**
 * Created by yvettee on 2017/9/17.
 */
public class JdbcUtilsSingle {

    private String url = "jdbc:oracle:thin:@localhost:1521:XE";
    private String user = "scott";
    private String password = "tiger";

    private static JdbcUtilsSingle instance = null;

    private JdbcUtilsSingle() {

    }

    //懒汉式
    public static JdbcUtilsSingle getInstance() {
        if (instance == null) {
            //可能会有并发问题,要进行加锁
            synchronized (JdbcUtilsSingle.class) {
                //双重检查,第一次访问加锁,以后instance都不会为null,就直接返回instance
                if (instance == null) {
                    instance = new JdbcUtilsSingle();
                }
            }
        }
        return instance;
    }

    //注册驱动
    static {
        try {
            Class.forName("oracle.jdbc.driver.OracleDriver");
        } catch (ClassNotFoundException e) {
            throw new ExceptionInInitializerError(e);
        }

    }

    public Connection getConnection() throws SQLException {
        return DriverManager.getConnection(url, user, password);
    }

    public void release(Connection conn, Statement st, ResultSet rs) {
        if (rs != null) {
            try {
                rs.close();
            } catch (Exception e) {
                e.printStackTrace();
            }
            rs = null;//如果rs没有被关闭,就置为空,变成一个垃圾对象,被垃圾回收器回收
        }
        if (st != null) {
            try {
                st.close();
            } catch (Exception e) {
                e.printStackTrace();
            }
            st = null;
        }
        if (conn != null) {
            try {
                conn.close();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
}
  1. 实现
package com.chinasofti.jdbc;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;

/**
 * Created by yvettee on 2017/9/17.
 */
public class Base {
    public static void main(String[] args) throws Exception {
        template();
    }

    static void template() throws Exception {
        Connection conn = null;
        Statement st = null;
        ResultSet rs = null;
        try {
            conn = JdbcUtilsSingle.getInstance().getConnection();
            st = conn.createStatement();
            String sql = "select * from emp";
            rs = st.executeQuery(sql);

            while (rs.next()) {
                System.out.println(rs.getInt(1) + rs.getString(2));
            }
        } finally {
            JdbcUtilsSingle.getInstance().release(conn, st, rs);
        }
    }
}

相关文章

  • JDBC单例模式

    JdbcUtilsSingle 工具类 实现

  • 【设计模式】单例模式

    单例模式 常用单例模式: 懒汉单例模式: 静态内部类单例模式: Android Application 中使用单例模式:

  • Android设计模式总结

    单例模式:饿汉单例模式://饿汉单例模式 懒汉单例模式: Double CheckLock(DCL)实现单例 Bu...

  • 2018-04-08php实战设计模式

    一、单例模式 单例模式是最经典的设计模式之一,到底什么是单例?单例模式适用场景是什么?单例模式如何设计?php中单...

  • 设计模式之单例模式详解

    设计模式之单例模式详解 单例模式写法大全,也许有你不知道的写法 导航 引言 什么是单例? 单例模式作用 单例模式的...

  • Telegram开源项目之单例模式

    NotificationCenter的单例模式 NotificationCenter的单例模式分析 这种单例模式是...

  • 单例模式Java篇

    单例设计模式- 饿汉式 单例设计模式 - 懒汉式 单例设计模式 - 懒汉式 - 多线程并发 单例设计模式 - 懒汉...

  • IOS单例模式的底层原理

    单例介绍 本文源码下载地址 1.什么是单例 说到单例首先要提到单例模式,因为单例模式是单例存在的目的 单例模式是一...

  • 单例

    iOS单例模式iOS之单例模式初探iOS单例详解

  • 单例模式

    单例模式1 单例模式2

网友评论

    本文标题:JDBC单例模式

    本文链接:https://www.haomeiwen.com/subject/ylkmsxtx.html