封装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();
		}
	}

}

 还可以进一步封装成线程安全的工具类。

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。