发表于: 2017-09-15 18:03:55

1 508


今天完成的事情:用JDBC编写了DAO层  


明天计划的事情:学习Mybatis


遇到的问题:异常处理的地方还是不太懂,需要多查查


收获

1.建立一个业务表结构如下:

2.建立一个与业务表对应的java类

public class Student {
   private String name ;
   private int id ;
   private int qq ;
   private String type ;
   private String university ;
   private String wish ;

   public void setName(String name) {this.name = name;}
   public String getName() {return name;}

   public int getId() {return id;}
   public void setId(int id) {this.id = id;}

   public int getQq() {return qq;}
   public void setQq(int qq) {this.qq = qq;}

   public void setType(String type) {this.type = type;}
   public String getType() {return type;}

   public String getUniversity() {return university;}
   public void setUniversity(String university) {this.university = university;}

   public String getWish() {return wish;}
   public void setWish(String wish) {this.wish = wish;}

   public String getInfo() {
       return "ID : " + id + "\nname : " + name + "\nqq : " + qq + "\ntype : " + type + "\nuniversity : " + university + "\nwish : " + wish;
   }
}

3.建立DAO接口

public interface IStudentDAO {
   public void add(Student student );
   public Student readByName(String name);
   public void delete(Student student);
   public void update(Student student);
}

4.建立DAOimpl的工具,把重复方法和默认值设置到该类中

public final class JdbcUtils {
   private static String url = "jdbc:mysql://localhost:3306/jdbc";
   private static String user = "root";
   private static String password = "640913";

   private JdbcUtils(){}

   static {//注册驱动
       try {
           Class.forName("com.mysql.jdbc.Driver");
       } catch (ClassNotFoundException e) {
           throw new ExceptionInInitializerError(e);
       }
   }

   public static Connection getConnection() throws SQLException {//连接
       return DriverManager.getConnection(url,user,password);
   }

   public static void free(ResultSet rs, Statement st, Connection conn){//释放
       try{
            if (rs != null)
               rs.close();
       } catch (SQLException e){
            e.printStackTrace();
       }finally{
            try {
               if (st != null)
                   st.close();
               } catch (SQLException e) {
                   e.printStackTrace();
               }finally {
                   if (conn != null)
                       try {
                           conn.close();
                          } catch (SQLException e) {
                           e.printStackTrace();
                          
               }
       }
   }
}

5.建立一个数据访问异常类 继承 RuntimeException类 运行异常

public class DaoException extends RuntimeException{
   public DaoException(String message, SQLException e) {
   }
}

6.建立DAOimpl类

public class StudentDAOJdbcImpl implements IStudentDAO {
   public void add(Student student) {
       Connection conn = null;
       PreparedStatement ps = null;
       ResultSet rs = null;

       try {
           conn = JdbcUtils.getConnection();
           String sql = "insert into student(name,qq,type,university,wish) values(?,?,?,?,?)";
           ps = conn.prepareStatement(sql);
           ps.setString(1, student.getName());
           ps.setInt(2, student.getQq());
           ps.setString(3, student.getType());
           ps.setString(4, student.getUniversity());
           ps.setString(5, student.getWish());
           ps.executeUpdate();
       } catch (SQLException e) {
           e.printStackTrace();
           throw new DaoException(e.getMessage(), e);//将 编译异常 转化为 运行异常 抛出
       } finally {
           JdbcUtils.free(rs, ps, conn);
       }

   }

   public void delete(Student student) {
       Connection conn = null;
       Statement st = null;
       ResultSet rs = null;

       try {
           conn = JdbcUtils.getConnection();
           st = conn.createStatement();
           String sql = "delete from student where id=" + student.getId();
           st.executeUpdate(sql);
       } catch (SQLException e) {
           e.printStackTrace();
           throw new DaoException(e.getMessage(), e);
       } finally {
           JdbcUtils.free(rs, st, conn);
       }

   }

   public Student readByName(String name) {
       Connection conn = null;
       PreparedStatement ps = null;
       ResultSet rs = null;
       Student student = null;
       try {
           conn = JdbcUtils.getConnection();
           String sql = "SELECT ID,name,qq,type,university,wish FROM student WHERE name = ?";
           ps = conn.prepareStatement(sql);
           ps.setString(1, name);
           rs = ps.executeQuery();
           while (rs.next()) {
               student = new Student();
               student.setId(rs.getInt("ID"));
               student.setName(rs.getString("name"));
               student.setQq(rs.getInt("qq"));
               student.setType(rs.getString("type"));
               student.setUniversity(rs.getString("university"));
               student.setWish(rs.getString("wish"));
           }
       } catch (SQLException e) {
           e.printStackTrace();//打印异常堆栈
           throw new DaoException(e.getMessage(), e);
       } finally {
           JdbcUtils.free(rs, ps, conn);
       }
       return student;
   }

   public void update(Student student){
       Connection conn = null;
       PreparedStatement ps = null;
       ResultSet rs = null;
       try {
           conn = JdbcUtils.getConnection();
           String sql = "update student set name=?,qq=?,type=?,university=?,wish=? WHERE ID=?";
           ps = conn.prepareStatement(sql);
           ps.setString(1, student.getName());
           ps.setInt(2, student.getQq());
           ps.setString(3, student.getType());
           ps.setString(4, student.getUniversity());
           ps.setString(5, student.getWish());
           ps.setInt(6,student.getId());
       } catch (SQLException e) {
           e.printStackTrace();
           throw new DaoException(e.getMessage(),e);
       } finally {
           JdbcUtils.free(rs, ps, conn);
       }
   }
}

7.建立一个test类测试

public class IStudentDAOTest {
   public static void main(String args[]){
       IStudentDAO iStudentDAO = new StudentDAOJdbcImpl();

       Student student = new Student();
       student.setWish("test dao wish");
       student.setType("test dao java");
       student.setQq(953274732);
       student.setName("test dao name");
       student.setUniversity("test dao university");

       iStudentDAO.add(student);

       Student s1 = iStudentDAO.readByName(student.getName());
       System.out.println(s1.getInfo());

   }
}

输出结果如下:

业务表:


返回列表 返回列表
评论

    分享到