JDBC 運用單例模式連接Oracle數據庫

    本章內容是運用單例模式來連接Oracle數據庫,其實JDBC中連接Oracle和MySql數據庫的代碼沒多大差別,只是需要導入的包和加載的驅動不一樣罷了。

    單例模式就是外部類在調用該類的時候不能直接new一個該類的實例對象,只能通過該類提供的get方法產生該類的對象,這樣就能控制該類在任何情況下只能產生一個實例。

    本函數是一個封裝類,封裝了連接數據庫的幾個步驟,外部類需要對數據庫進行操作的時候只需產生該類的實例並調用該類的executeQuery(String sql)方法或executeUpdate(String sql)方法,參數爲SQL語句。executeQuery(String sql)方法返回一個ResultSet結果集,該方法一般用於select語句,executeUpdate(String sql)方法返回影響的行數,一般用於INSERT、UPDATE 或 DELETE 語句。

/*
 * 數據庫類,封裝對數據庫的操作
 */
package com.niit.chenpw.jdbc;

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

/**
 * 數據庫類,封裝對數據庫的操作
 * @author ChenPW
 *
 */
public class DataBase {

	// 聲明connection
	private Connection conn = null;
	// 聲明ResultSet
	private ResultSet rs;
	// 聲明Statement
	private Statement stmt;
	// Oracle驅動
	private String className = "oracle.jdbc.driver.OracleDriver";
	// Oracle連接字符串
	private String url = "jdbc:oracle:thin:@192.168.36.102:1521:ORCL";
	// 數據庫用戶名
	private String userName = "SCOTT";
	// 數據庫密碼
	private String password = "root";
	

	// 聲明DBManager的私有對象db
	private static DataBase db;
	
	/**
	 * 創建私有構造函數
	 */
	private DataBase() {
		try {
			// 加載驅動
			Class.forName(className);
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		}
	}
	
	/**
	 * 提供一個靜態方法
	 * @return 返回本類的實例
	 */
	public static synchronized DataBase getDataBase() {
		if (db==null) {
			db=new DataBase();
		}
		return db;
	}
	
	/**
	 * 獲取連接
	 * @return conn
	 */
	public Connection getConn() {
		try {
			// 獲取連接
			conn = DriverManager.getConnection(url, userName, password);
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return conn;
	}
	
	/**
	 * 獲取Statement記錄
	 * @return stmt
	 */
	public Statement getStmt() {
		try {
			// 獲取連接
			conn=getConn();
			// 獲取Statement記錄
			stmt = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,
					ResultSet.CONCUR_UPDATABLE);
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return stmt;
	}

	
	/**
	 * 執行一句查詢的sql語句
	 * @param sql sqi語句
	 * @return 結果集
	 */
	public ResultSet executeQuery(String sql) {
		// 利用Statement對象執行參數的sql
		try {
			rs = getStmt().executeQuery(sql);
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return rs;
	}
	
	/**
	 * 執行單句INSERT、UPDATE 或 DELETE 語句
	 * @param sql sql語句
	 */
	public void executeUpdate(String sql) {
		//執行SQL語句
		try {
			getStmt().executeUpdate(sql);
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}
	
	/**
	 * 關閉連接
	 */
	public void closed() {
		try {
			if (rs != null)
				rs.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
		try {
			if (stmt != null)
				stmt.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
		try {
			if (conn != null)
				conn.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

}


    對數據庫的數據進行操作完以後,千萬別忘了關閉數據連接!!!!否則會有很KB的事情發生!!!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章