常规写法
用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@14c92a7com.mysql.jdbc.JDBC4Connection@cdf450com.mysql.jdbc.JDBC4Connection@9c6c30com.mysql.jdbc.JDBC4Connection@80f252
从上面的答案我们可以看出,每次都是返回不一样的Connecion实例。
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@89848dcom.mysql.jdbc.JDBC4Connection@89848dcom.mysql.jdbc.JDBC4Connection@89848dcom.mysql.jdbc.JDBC4Connection@89848d
从上面的答案我们可以看出,每次都是返回的Connection的实例都是一样的。因为static{}代码段只会在类初次加载的时候执行一次。所以static{}代码块用于获取Connection实例是不合适,但是static{}代码块读取配置文件里的参数值,用于对类的静态成员变量经行赋值操作是非常好的选择。