封裝JDBC工具類


       JDBC連接數據庫基本的步驟是固定的,這樣就可以考慮封裝一個工具類來簡化數據庫操作。

         封裝時用到了Java中的properties配置文件,是以一種鍵值對的形式存在的,可以把連接數據庫要動態的信息保存到里面,這樣比較直觀,不容易出錯,而且容易維護。

         把配置文件放到src下就可以,如果要放到包下面就配置文件的相對路徑就必須從包名開始。

         Demo :

         db.properties

         

mysqlDriver=com.mysql.jdbc.Driver
mysqlURL=jdbc:mysql://localhost:3306/student?useUnicode=true&characterEncoding=utf8
mysqlUser=root
mysqlPwd=1234
oracleDriver=oracle.jdbc.driver.OracleDriver
oracleURL=jdbc\:oracle\:thin\:@localhost\:1521\:orcl
oracleUser=scott
oraclePwd=tiger

         JDBCUtil.java

 

package com.wxisme.jdbcutil;

import java.io.Closeable;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
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數據庫操作工具類  簡化數據庫操作
 * @author wxisme
 *
 */
public class JDBCUtil {
	//資源文件
	static Properties pros = null;
	//靜態初始化  當加載JDBCUtil類時調用
	static {   
		pros = new Properties();
		try {
			//加載資源文件
			InputStream in = Thread.currentThread().getContextClassLoader().getResourceAsStream("db.properties");
			if(in == null) {
				throw new FileNotFoundException("配置文件未找到");
			}
			pros.load(in);
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
	
	/**
	 * 獲取數據庫連接
	 * @return Connection
	 */
	public static Connection getMySQLConnection() {
		Connection conn = null;
		try {
			//加載數據庫驅動
			Class.forName(pros.getProperty("mysqlDriver"));
			//獲取數據庫連接
			conn = DriverManager.getConnection(pros.getProperty("mysqlURL"),
					pros.getProperty("mysqlUser"),pros.getProperty("mysqlPwd"));
			
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return conn;
	}
	
	public static Connection getOracleConn(){
		try {
			Class.forName(pros.getProperty("oracleDriver"));
			return DriverManager.getConnection(pros.getProperty("oracleURL"),
					pros.getProperty("oracleUser"),pros.getProperty("oraclePwd"));
		} catch (Exception e) {
			e.printStackTrace();
			return null;
		}
	}
	/**
	 * 關閉io資源
	 * @param io
	 */
	public static void closeFile(Closeable ... io) {
		for(Closeable temp : io) {
			if(temp != null) {
				try {
					temp.close();
				} catch (IOException e) {
					System.out.println("文件關閉失敗");
					e.printStackTrace();
				}
			}
		}
	}
	
	//關閉JDBC資源  注意順序
	public static void close(ResultSet rs,Statement ps,Connection conn) {
		try {
			if(rs!=null){
				rs.close();
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
		try {
			if(ps!=null){
				ps.close();
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
		try {
			if(conn!=null){
				conn.close();
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}
	
	public static void close(Statement ps,Connection conn){
		try {
			if(ps!=null){
				ps.close();
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
		try {
			if(conn!=null){
				conn.close();
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}
	
	public static void close(Connection conn){
		try {
			if(conn!=null){
				conn.close();
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}
	

}

   UtilTest.java

package com.wxisme.jdbcutil;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;


public class UtilTest {

	public static void main(String[] args) {
		Connection conn = JDBCUtil.getMySQLConnection();
		PreparedStatement ps = null;
		ResultSet rs = null;
		String sql = "select * from student where id = ?";
		try {
			ps = conn.prepareStatement(sql);
			ps.setInt(1, 1);
			rs = ps.executeQuery();
			
			while(rs.next()) {
				System.out.println(rs.getString("name"));
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}

}

 還可以進一步封裝成線程安全的工具類。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM