数据库链接

数据库链接

简介:

 

目录:

  1. 常规写法

  2.   用static{}代码段来初始化Connection

常规写法

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

public class DBUtils {
    
  private static final String CONN_STR="jdbc:mysql://localhost:3306/zz?characterEncoding=UTF-8";
  private static final String USERNAME="root";
  private static final String PWD="123123";
    
  private static DBUtils me=new DBUtils();
    
    //为了是单例模式成为唯一可以获取该对象的方法,将该类的无参构造函数设为私有
    private DBUtils() {}
    
    public static DBUtils getInstance(){
        return me;
    }

    /**
     * 获取数据库连接
     * @return
     */
    public Connection getConn()
    {
        
        Connection conn=null;
        
        try {
            //查看类路径中是否存在这个驱动入口类
            Class.forName("com.mysql.jdbc.Driver");
            conn=DriverManager.getConnection(CONN_STR, USERNAME, PWD);
        } catch (ClassNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } 
        
        return conn;
    }
    
    /**
     * 释放数据库资源
     * @param conn
     * @param pstmt
     * @param rs
     */
    public void ReleaseRes(Connection conn,PreparedStatement pstmt,ResultSet rs)
    {
        try{
          if(rs!=null) rs.close();
          if(pstmt!=null) pstmt.close();
          if(conn!=null)  conn.close();
        }catch(SQLException e)
        {
            e.printStackTrace();
        }
    }
}

测试代码:

public class DBUtilsTest {
   public static void main(String[] args) {
    System.out.println(DBUtils.getInstance().getConn());
    System.out.println(DBUtils.getInstance().getConn());
    System.out.println(DBUtils.getInstance().getConn());
    System.out.println(DBUtils.getInstance().getConn());
  }
}
com.mysql.jdbc.JDBC4Connection@14c92a7
com.mysql.jdbc.JDBC4Connection@cdf450
com.mysql.jdbc.JDBC4Connection@9c6c30
com.mysql.jdbc.JDBC4Connection@80f252
View Code

      从上面的答案我们可以看出,每次都是返回不一样的Connecion实例。

      用static{}代码段来初始化Connection

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

public class DBUtils {
    
  private static final String CONN_STR="jdbc:mysql://localhost:3306/zz?characterEncoding=UTF-8";
  private static final String USERNAME="root";
  private static final String PWD="123123";
    
  private static Connection conn;
static{ System.out.println("static{} 代码开始执行"); try { //查看类路径中是否存在这个驱动入口类 Class.forName("com.mysql.jdbc.Driver"); conn=DriverManager.getConnection(CONN_STR, USERNAME, PWD); } catch (ClassNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } public static Connection getConn() { return conn; } }

 测试代码:

public class DBUtilsTest {
   public static void main(String[] args) {
    System.out.println(DBUtils.getConn());
    System.out.println(DBUtils.getConn());
    System.out.println(DBUtils.getConn());
    System.out.println(DBUtils.getConn());
  }
}
static{} 代码开始执行
com.mysql.jdbc.JDBC4Connection@89848d
com.mysql.jdbc.JDBC4Connection@89848d
com.mysql.jdbc.JDBC4Connection@89848d
com.mysql.jdbc.JDBC4Connection@89848d
View Code

      从上面的答案我们可以看出,每次都是返回的Connection的实例都是一样的。因为static{}代码段只会在类初次加载的时候执行一次。所以static{}代码块用于获取Connection实例是不合适,但是static{}代码块读取配置文件里的参数值,用于对类的静态成员变量经行赋值操作是非常好的选择。

原文地址:https://www.cnblogs.com/bmbi/p/5027434.html