17_传智播客JDBC_结合Service层讲解DAO层的异常处理


package five.domain;
import java.sql.Date;

public class User {

 private int id;
 private String name;
 private String password;
 private Date brithday;
 private float monney;

 public int getId() {
  return id;
 }

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

 public String getName() {
  return name;
 }

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

 public Date getBrithday() {
  return brithday;
 }

 public void setBrithday(Date brithday) {
  this.brithday = brithday;
 }

 public float getMonney() {
  return monney;
 }

 public void setMonney(float monney) {
  this.monney = monney;
 }

 public String getPassword() {
  return password;
 }

 public void setPassword(String password) {
  this.password = password;
 }

 public User(int id, String name, String password, Date brithday,
   float monney) {
  super();
  this.id = id;
  this.name = name;
  this.password = password;
  this.brithday = brithday;
  this.monney = monney;
 }
 public User() {
  super();
 }
 public User(String name) {

  this.name = name;

 }
public String toString() {
 return "name = " + this.name +
        " id = "  + this.id +
        " brithday = " + this.brithday +
     " monney = " + this.monney;
 
}
}
///////////////////////////////////////////////////////////////////////////////////////////////////////

package five.dao;

import java.util.List;

import five.domain.User;

public interface UserDao {

 public void addUser(User user);

 public User getUser(int userId);

 public void updataUser(User user);

 public void deleteUser(User user);

 public List<User> findUser(String name, String password);

}

///////////////////////////////////////////////////////////////////////////////////////////////////////

package five.daoImpl;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;

import five.dao.UserDao;
import five.dao.myException.MyUserException;
import five.domain.User;
import five.utils.Utils;


public class UserDaoImpl implements UserDao {

 public void addUser(User user) {

  Connection connection = null;
  PreparedStatement preparedStatement = null;

  try {

   connection = Utils.getConnection();
   String sqlString = " insert into user(id, name, brithday, monney, password) value(?,?,?,?,?)";
   preparedStatement = connection.prepareStatement(sqlString);
   preparedStatement.setInt(1, user.getId());
   preparedStatement.setString(2, user.getName());
   preparedStatement.setFloat(4, user.getMonney());
   preparedStatement.setString(5, user.getPassword());
   preparedStatement.setDate(3, new java.sql.Date(user.getBrithday()
     .getTime()));

   // 4.执行语句
   int i = preparedStatement.executeUpdate();

   System.out.println("新建" + i + "条记录");
  } catch (SQLException e) {
            // 为什么 捕获了异常 不能什么也不做?
   // 原因 1 不利于debug
   // 原因 2 异常 转移
   //       例如 在注册用户 出现异常 没有任何处理
   //       那么 注册出现异常时, 这个异常就被隐藏掉了
   //       当用户 在检索 更新 这个用户的时候 就可能
   //       出现异常了。由 系统就 转移。
   // 怎样处理 异常?
   // 方法一  捕获解决掉(打印)
   //        但是这个异常应该 抛出到业务层, 作处理,提醒用户再注册
   // 怎样抛出异常?
   //        原封不动的抛出去?那样 就要修改接口的签名, (实现接口类抛出的异常是
   //        接口声明异常的子集。)
   //        导致的结果是 业务层在调用接口实现业务逻辑时, 就要处理 持久层的逻辑
   //        有悖于 MVC 三层构架 的思想 (将jdbc 转换成 hibernate?)
   //        解决 捕获到异常(编译异常)转换成的 运行异常 抛出去
   //        编译异常 必须要处理 运行异常 不是必须要处理
   throw new MyUserException(e.getMessage(), e);
  } finally {
   Utils.free(connection, preparedStatement, null);
  }

 }

 public void deleteUser(User user) {
  // TODO Auto-generated method stub

 }

 public List<User> findUser(String name, String password) {
  // TODO Auto-generated method stub
  return null;
 }

 public User getUser(int userId) {
  // TODO Auto-generated method stub
  return null;
 }

 public void updataUser(User user) {
  // TODO Auto-generated method stub

 }
}

///////////////////////////////////////////////////////////////////////////////////////////////////////

发布了48 篇原创文章 · 获赞 3 · 访问量 4万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章