1. 程式人生 > >原生JDBCUtils工具類封裝程式碼實現

原生JDBCUtils工具類封裝程式碼實現

import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;

/*
 * 建立JDBC工具類
 * 定義一個properties檔案,儲存資料庫的4大資訊
 * 在成員位置定義5個儲存資料庫資訊的變數
 * 定義一個靜態程式碼塊
 * 	a.使用Properties集合+IO讀取配置檔案中的資訊,把資訊儲存到集合中
 * 	b.獲取集合中的資料庫連線資訊,給成員變數賦值
 * 	c.註冊驅動和獲取資料庫連線物件
 * 定義一個靜態方法,用於獲取並返回資料庫連線物件Connection
 * 定義一個靜態方法,用於釋放資源
 */
public class JDBCUtils {
	/**
	 * 在成員位置定義5個儲存資料庫資訊的變數
	 */
	private static String driver;

	private static String url;

	private static String user;

	private static String password;

	/**
	 * 定義一個Connection型別的變數用來儲存獲取到的Connection例項化物件
	 */
	private static Connection conn;

	/**
	 * 私有構造方法,防止使用者建立物件,浪費記憶體空間
	 */
	private JDBCUtils() {

	}

	static {
		try {
			/**
			 * 使用properties集合讀取配置資訊
			 */
			FileReader fr = new FileReader("data.properties");
			Properties p = new Properties();
			p.load(fr);
			/**
			 * 獲取集合中的資料庫連線資訊,給成員變數賦值
			 */
			driver = p.getProperty("driver");
			url = p.getProperty("url");
			user = p.getProperty("user");
			password = p.getProperty("password");

		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}

		/**
		 * 建立驅動和資料庫連線物件
		 */
		try {
			Class.forName(driver);
			conn = DriverManager.getConnection(url, user, password);
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		} catch (SQLException e) {
			e.printStackTrace();
			/**
			 * 如果資料庫連線失敗,則不應該繼續往下,丟擲執行時異常給虛擬機器,終止程式
			 */
			throw new RuntimeException("資料庫連線失敗!");
		}

	}

	/**
	 * 定義一個靜態方法,用於獲取資料庫連線物件Connection
	 */
	public static Connection getConnection() {
		return conn;
	}

	/**
	 * 定義一個靜態方法,用於釋放資源
	 */
	public static void close(ResultSet rs, Statement stat, Connection conn) {
		if (rs != null) {
			try {
				rs.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
		if (stat != null) {
			try {
				stat.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
		if (conn != null) {
			try {
				conn.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
	}

}
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;

/*
 * 測試JDBCUtils工具類
 */
public class Test {
	public static void main(String[] args) {
		show();
	}

	private static void show() {
		/**
		 * 獲取資料庫連線物件Connection
		 */
		Connection conn = JDBCUtils.getConnection();
		Statement stat = null;
		ResultSet rs = null;
		try {
			/**
			 * 獲取執行sql語句的執行者物件
			 */
			stat = conn.createStatement();
			/**
			 * 執行sql語句
			 */
			String sql = "SELECT * FROM 表名";
			rs = stat.executeQuery(sql);
			/**
			 * 處理結果集,遍歷Set集合
			 */
			if (rs.next()) {
				System.out.println(rs.getInt("cid") + "\t" + rs.getString("cname"));
			} else {
				System.out.println("沒有查詢到指定的資料!");
			}
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			/**
			 * 使用JDBCUtilsConfig工具類中的方法close釋放資源
			 */
			JDBCUtils.close(rs, stat, conn);
		}
	}

}