单例模式建立工具类

Posted xiueer

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了单例模式建立工具类相关的知识,希望对你有一定的参考价值。

/*
 * 
 *JdbcUtilsSing.java
 *
 * 这是一个工具类,一般工具类不能被继承,定义成final
 * 不需要构造实例,用私有的构造方法
 * 单例模式或者用static静态代码块,本例用单例模式
 * 
 * */
package cn.itcast.jdbc;

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

public final class JdbcUtilsSing 

    private static String url = "jdbc:mysql://localhost:3306/jdbc";
    private static String user = "root";
    private static String password = "123456";

    private static JdbcUtilsSing instance = null;

    private JdbcUtilsSing() 
    

    public static JdbcUtilsSing getInstance() 
        if (instance == null)  // 延迟加载
            synchronized (JdbcUtilsSing.class)  // 同步锁
                if (instance == null)
                    instance = new JdbcUtilsSing();
            
        
        return instance;
    

    // 注册驱动
    static 
        try 
            Class.forName("com.mysql.jdbc.Driver");
         catch (Exception e) 
            throw new ExceptionInInitializerError(e);
        
    

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

    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 (SQLException e) 
                    e.printStackTrace();
                
            
        
    

使用这个类

package cn.itcast.jdbc;

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

public class Base 

    public static void main(String[] args) 
        try 
            template();
         catch (Exception e) 
            e.printStackTrace();
        
    

    static void template() throws Exception 
        Connection conn = null;
        Statement st = null;
        ResultSet rs = null;

        try 
            // 2.建立连接
            conn = JdbcUtilsSing.getInstance().getConnection();

            // 3.创建语句
            st = conn.createStatement();

            // 4.执行语句
            rs = st.executeQuery("select * from user");

            // 5.处理结果
            while (rs.next()) 
                System.out.println("id:" + rs.getObject(1) + "\\tname:"
                        + rs.getObject(2) + "\\tbirthday:" + rs.getObject(3)
                        + "\\tmoney:" + rs.getObject(4));
            

            // 6.释放资源
         finally 
            JdbcUtilsSing.getInstance().free(rs,st,conn);
        
    

比起static代码的方式稍微麻烦一点

以上是关于单例模式建立工具类的主要内容,如果未能解决你的问题,请参考以下文章

请问java 单例类 与 静态类 有何不同?

单例模式

PHP 面向对象:设计模式之单例模式

单例模式PropertiesUtil工具类

设计模式——单例模式

单例设计模式