DAO部分的基础类BaseDAO

来源:互联网 发布:python网络编程实例 编辑:程序博客网 时间:2024/06/15 00:47

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程序  得到的结果是相同的



0 0