zoukankan      html  css  js  c++  java
  • 如何使用单例模式返回一个安全的Connection

    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.SQLException;
    
    public class ConnectDemo {
        public enum MyEnumSingleton {
    
            connectionFactory;
            private Connection conn;
    
            private MyEnumSingleton() {
                try {
                    String url = "jdbc:mysql://localhost:3306/mydb";
                    String name = "root";
                    String password = "";
                    String Driver = "com.mysql.jdbc.Driver";
    
                    Class.forName(Driver);
    
                    conn = DriverManager.getConnection(url, name, password);
                } catch (SQLException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
    
                } catch (ClassNotFoundException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
    
            public Connection getConn() {
                return conn;
            }
    
        }
    
        public static Connection getConn() {
            return MyEnumSingleton.connectionFactory.getConn();
        }
    
    }

    使用枚举类时,构造方法会被自动调用。

    再修改一下,降低一下耦合度,将建立连接的四大参数改成在配置文件中获取

    首先在项目目录下建立一个配置文件

    把参数添加进去

    变成从配置文件中读取参数,这样修改的话只用修改配置文件就可以了

    import java.io.IOException;
    import java.io.InputStream;
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.SQLException;
    import java.util.Properties;
    
    public class ConnectDemo {
        public enum MyEnumSingleton {
    
            connectionFactory;
            private Connection conn;
    
            private MyEnumSingleton() {
                try {
                    InputStream in=Connection.class.getClassLoader()
                            .getResourceAsStream("dbconfig.properties");
                    Properties pro=new Properties();
                    pro.load(in);
                    String url = pro.getProperty("url");
                    String name = pro.getProperty("name");
                    String password =pro.getProperty("password");
                    String Driver = pro.getProperty("DriverClassName");
    
                    Class.forName(Driver);
    
                    conn = DriverManager.getConnection(url, name, password);
                } catch (SQLException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
    
                } catch (ClassNotFoundException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }catch(IOException e){
                    e.printStackTrace();
                }
            }
    
            public Connection getConn() {
                return conn;
            }
    
        }
    
        public static Connection getConn() {
            return MyEnumSingleton.connectionFactory.getConn();
        }
    
    }
  • 相关阅读:
    jmeter如何引用自己编写的java文件编译的jar包
    Vue+Django REST framework 打造生鲜电商项目(学习笔记二)
    mysql笔试题
    面试遇到的问题
    Idea中maven项目pom文件中已引入testng但项目文件中无法引入@Test
    记录一次TestNg+MyBatis中的SqlSession出现的问题,问题虽然解决了但尚未明白问题原因
    PyMySQL的基本操作
    MySQL循环语句
    Vue父子组件和非父子组件间的通信
    Python的静态方法和类成员方法
  • 原文地址:https://www.cnblogs.com/wxw7blog/p/7860358.html
Copyright © 2011-2022 走看看