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,如需轉載請自行聯系原作者