天天看點

java單例模式學習筆記

java單例模式學習筆記

工具層:

import java.sql.Connection;

import java.sql.DriverManager;

//工具層

//DBHelper類,展現了單例模式的思想

public class DBHelper {

private static Connection conn; // 資料庫連接配接對象

// 驅動

private static final String DRIVER = "com.mysql.jdbc.Driver";

// 資料庫的URL位址

private static final String URL = "jdbc:mysql://192.168.47.196:3306/school?useUnicode=true&characterEncoding=UTF-8";

// 使用者名

private static final String USERNAME = "root";

// 密碼

private static final String PASSWORD = "123456";

// 在靜态代碼塊中,負責加載驅動

static {

try {

Class.forName(DRIVER);

} catch (Exception ex) {

ex.printStackTrace();

}

// 既然是單例模式,應該讓構造方法私有化

private DBHelper() {

// 外部調用的統一的方法

public static Connection getConnection() throws Exception {

if (conn == null) {

conn = DriverManager.getConnection(URL, USERNAME, PASSWORD);

return conn;

業務邏輯層:

import java.sql.PreparedStatement;

import java.sql.ResultSet;

//DAO層

//學生業務邏輯類

public class StudentsDAO {

public static Connection conn = null;// 連接配接對象

public static PreparedStatement stmt = null;

public static ResultSet rs = null;// 結果集

// 添加學生方法

public boolean addStudents(Students s) {

String sql = "insert into Students values (?,?,?,?,?,?);";

conn = DBHelper.getConnection();

stmt = conn.prepareStatement(sql);

stmt.setInt(1, s.getSid());

stmt.setString(2, s.getSname());

stmt.setInt(3, s.getAge());

stmt.setString(4, s.getGender());

stmt.setString(5, s.getEmail());

stmt.setString(6, s.getAddress());

int result = stmt.executeUpdate();

if (result > 0) {

return true;

} else {

return false;

} finally {

destoryResource();

// 查詢所有的學生資料

public static void query() {

String sql = "select * from Students;";

rs = stmt.executeQuery(sql);

while (rs.next()) {

System.out.println("學号:" + rs.getInt("sid") + ",姓名:" + rs.getString("sname") + ",年齡:" + rs.getInt("age")

+ ",性别:" + rs.getString("gender"));

// 釋放資源的方法

public static void destoryResource() {

// if(rs!=null)

// {

// rs.close();

// rs=null;

// }

if (stmt != null) {

stmt.close();

stmt = null;

/*

 * 暫時不釋放Connection資源 if(conn!=null) { conn.close(); conn=null; }

 */

實體層:

public class Students {

private int sid;//學号

private String sname;//姓名

private int age;//年齡

private String gender;//性别

private String email;//電子郵箱

private String address;//位址

public int getSid() {

return sid;

public void setSid(int sid) {

this.sid = sid;

public String getSname() {

return sname;

public void setSname(String sname) {

this.sname = sname;

public int getAge() {

return age;

public void setAge(int age) {

this.age = age;

public String getGender() {

return gender;

public void setGender(String gender) {

this.gender = gender;

public String getEmail() {

return email;

public void setEmail(String email) {

this.email = email;

public String getAddress() {

return address;

public void setAddress(String address) {

this.address = address;

//保留預設的不帶參數的構造方法

public Students()

{

public Students(int sid,String sname,int age,String gender,String email,String address)

測試層:

public class Test {

public static void main(String[] args) {

// TODO Auto-generated method stub

try

  Connection conn1 = DBHelper.getConnection();

          Connection conn2 = DBHelper.getConnection();

          //測試是否是單例模式

          System.out.println(conn1==conn2);

  Students s = new Students(55,"張無忌",3,"男","[email protected]","武當山");

  StudentsDAO sdao = new StudentsDAO();

  if(sdao.addStudents(s))

  {

  System.out.println("添加成功!");

  }

  else

  System.out.println("添加失敗!");

catch(Exception ex)

StudentsDAO.query();

本文轉自 知止内明 51CTO部落格,原文連結:http://blog.51cto.com/357712148/1982905,如需轉載請自行聯系原作者