DAO部分的基础类BaseDAO

1.每个DAO中都有连接数据库的过程,如果每次连接的话  都要重写驱动和用户名的话将是一个繁琐的过程

我们可以通过一个DAO父类来解决这个问题

package day01pm.dao;

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

/**
 * DAO父类
 * 
 * 基础类
 * 提供所有的DAO 都需要兼备的特性
 * 
 * @author ssd
 *
 */
public class BaseDAO {
	private static String diver = "oracle.jdbc.driver.OracleDriver";
	private static String url = "jdbc:oracle:thin:@localhost:1521:orcl";
	private static String user = "scott";
	private static String pwd = "Shen2014";
	/**
	 * 在静态初始化中注册驱动
	 * 驱动不需要重复注册,所以静态初始化最适合注册驱动
	 * @return
	 */
	static {
		try{
			Class.forName(diver);
			/**
			 * oracle.jdbc.driver.OracleDriver类
			 * 在Class.froName()的时候被载入JVM
			 * OracleDriver 是JDBC中的Driver 的子类
			 * 他被要求在静态初始化的时候要将自身驱动的信息
			 * 通过DriverManager 的静态方法注册进去,这样DriverManager就
			 * 知道应该如何通过OracleDriver去连接数据库了。
			 * 所以之后就可以公国DriverManager 的另一个静态方法:
			 *   getConnection()来根据之前的注册的驱动信息来获取连接了。
			 */
			Connection conn = DriverManager.getConnection(url,user,pwd);
		}catch (Exception e){
			e.printStackTrace();
			//若注册失败,我们要通知调用者
			throw new RuntimeException(e);
			
			
		}
	}
	/**
	 * 获取数据库连接对象Connection
	 * @return
	 * @throws SQLException  当连接失败时抛出异常
	 */
	protected static Connection getConnection() throws SQLException{ 
		return DriverManager.getConnection(url,user,pwd);
		
	}
	protected static void closeConnection (Connection conn){
		if(conn != null){
			try{
				conn.close();
				
			}catch(SQLException e){
				e.printStackTrace();
			}
		}
	}
}
这样的话  上次的StudentDAO就可以通过继承BaseDAO的方法

测试结果相同

package day01pm.dao;

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

import day01pm.entity.Student;

/**
 * DAO 数据连接对象
 * 
 * StudentDAO 用于操作数据库Student表
 * 
 * @author ssd
 *
 */

public class StudentDAO extends BaseDAO{
	/**
	 * 根据学生的姓名查询学生的信息
	 * @param name
	 * @return
	 */
	public Student findStudentByName(String name){
		Connection conn = null;
		try {
			//通过父类的BaseDAO的getConnection()方法获取数据库连接
			conn = getConnection();
			Statement state = conn.createStatement();
			String sql = "SELECT * FROM student WHERE name = '"+name+"'";
			/**
			 *根据用户名查询该用户的信息
			 *并将这条数据转化为一个Student对象返回
			 */
			ResultSet rs = state.executeQuery(sql);
			if(rs.next()){
				Student student = new Student();
				student.setId(rs.getString("id"));
				student.setName(rs.getString("name"));
				student.setAge(rs.getInt("age"));
				student.setSex(rs.getString("sex"));
				return student;
			}
		}catch (Exception e){
			e.printStackTrace();
		}finally{
			closeConnection(conn);			
		}
		return null;
	}

}

通过原来的Test程序  得到的结果是相同的



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值