使用JDBC连接MySQL数据库-典型案例分析(2)-封装数据库的连接与关闭

使用JDBC连接MySQL数据库--典型案例分析(二)--封装数据库的连接与关闭

转载请注明出处:http://blog.****.net/uniquewonderq

在第一节中,我们已经基本实现了使用Myeclipse和Mysql数据库的连接,并且查询了员工的一些信息。但是上次的实现多多少少有不完美之处,这次进行进一步优化。

这次:将数据库的连接获取和关闭封装到DBUtility类中,并重构之前的案例,使用DBUtility类获取和关闭连接。

步骤

封装数据库连接的获取和关闭的过程如下:

1.创建属性db.properties,在该文件中以键值对的形式来存储连接数据库的相关信息。该文件的内容如下:

jdbc.driver=com.mysql.jdbc.Driver

jdbc.url=jdbc:mysql://127.0.0.1:3306/emp

jdbc.user=wonderq

jdbc.password=root

这样做的目的是当需要修改连接数据的信息时,只需修改该文件集合,降低了连接数据库的信息与使用类之间的耦合。

2.创建DBUtility类,使用static块,初始化连接数据的信息,代码如下:

	static {
			try{
				//加载配置文件
	properties.load(DBUtility.class.getClassLoader().getResourceAsStream("Emp/src/dao/db.properties"));
	driver=properties.getProperty("jdbc.driver");
	url=properties.getProperty("jdbc.url");
	user=properties.getProperty("jdbc.user");
	pwd=properties.getProperty("jdbc.password");
	Class.forName(driver);//加载驱动类
			}
			catch (Exception e) {
				e.printStackTrace();
				throw new RuntimeException(e);
			}
		}
其中,
"Emp/src/dao/db.properties"
表示文件db.properties所在的包路径,可以按照你自己工程的包路径来写代码。

3.创建打开和关闭连接数据库的方法,代码如下:

public static Connection openConnection() throws SQLException{
			return DriverManager.getConnection(url,user,pwd);
		}
	public static void closeConnection(Connection con){
		if(con!=null){
			try {
				con.close();
			} catch (SQLException e) {
				System.out.println("关闭数据库时发生异常!");
			}
		}
	}
4.重构EmpDAO类,使用DBUtility类获取连接和关闭连接。
重构EmpDAO类,在该类中使用DBUtility类的openconnection获取连接,使用closeConnection方法关闭连接,代码如下所示:

package dao;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class EmpDAO {
	public static void main(String [] args){
		EmpDAO dao=new EmpDAO();
		dao.findAll();
	}
	public void findAll(){
		Connection con=null;
		Statement stmt=null;
		ResultSet rs=null;
		
		try {
			con=DBUtility.openConnection();
			stmt=con.createStatement();
			rs=stmt.executeQuery("select empno,ename,sal,hiredate from emp;");
			while(rs.next()){
				System.out.println(rs.getInt("empno")+","+rs.getString("ename")+","+rs.getDouble("sal")+","+rs.getDate("hiredate"));
			}
		} catch (SQLException e) {
			System.out.println("数据库访问异常!");
			throw new RuntimeException(e);
		}
		finally{
			try {
				if(rs!=null){
						rs.close();
					}
					if(stmt!=null){
						stmt.close();
					}
			} catch (SQLException e) {
				System.out.println("释放资源时发生异常!");
			}
			DBUtility.closeConnection(con);
		}
	}
}

运行类EmpDAO,输出结果与之前相同:

使用JDBC连接MySQL数据库-典型案例分析(2)-封装数据库的连接与关闭