数据库链接
简介:
目录:
-
常规写法
-
用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
从上面的答案我们可以看出,每次都是返回不一样的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
从上面的答案我们可以看出,每次都是返回的Connection的实例都是一样的。因为static{}代码段只会在类初次加载的时候执行一次。所以static{}代码块用于获取Connection实例是不合适,但是static{}代码块读取配置文件里的参数值,用于对类的静态成员变量经行赋值操作是非常好的选择。