JDBC学习之路(五)基于MVC框架的JDBC异常与设计模式处理

以前写JDBC时候,根本没有考虑过底层JDBC的SQLException异常如何处理,有时候直接放在那里就不动了,但是这样的做法非常不正确,今天看了一下JDBC的视频,知道了正确的JDBC处理办法,还有一些正规的处理模式,现在感觉以后做东西还是得正规一些好。下面将代码贴出来研究研究

首先得写一个类,他实现了对JDBC类的封装,这样中间层进行访问的时候能和Java的面向对对象技术切合起来,本例子以User为例


package com.bird.jdbc.domain; import java.util.Date; /** * * @use 对一个表的面向对象的封装 * * @author bird * */ public class User { private int id; private String name; private Date birthday; private float money; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; }
然后建立一个接口,将需要的操作都放入到接口中进行声明,以便以后更改数据访问层的时候能不改变中间层的东西

package com.bird.jdbc.dao; import com.bird.jdbc.domain.user; /** * * @use 对方法的进行接口的封装 * * @author bird * */ public interface UserDao {//可以看到,传递的东西都是对象,不再是JDBC的一个个表 public void addUser(User user); public User getUser(int userId); public User findUser(String loginName, String password); public void update(User user); public void delete(User user); }


下面是对本接口的实现,要单独开辟一个包出来

package com.bird.jdbc.dao.impl; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import cn.itcast.jdbc.JdbcUtils; import cn.itcast.jdbc.dao.DaoException; import cn.itcast.jdbc.dao.UserDao; import cn.itcast.jdbc.domain.User; /** * * @use 对接口的实现 * * @author Bird * */ public class UserDaoJdbcImpl implements UserDao { public void addUser(User user) { Connection conn = null; PreparedStatement ps = null; ResultSet rs = null; try { conn = JdbcUtils.getConnection(); String sql = "insert into user(name,birthday, money) values (?,?,?) "; ps = conn.prepareStatement(sql); ps.setString(1, user.getName()); ps.setDate(2, new java.sql.Date(user.getBirthday().getTime())); ps.setFloat(3, user.getMoney()); ps.executeUpdate(); } catch (SQLException e) { throw new DaoException(e.getMessage(), e);//注意一定要将异常抛出, } finally {//这样就将编译错误改编成运行错误,让中间层不用强制处理,当他想要处理的时候再处理 JdbcUtils.free(rs, ps, conn); } } public void delete(User user) { Connection conn = null; Statement st = null; ResultSet rs = null; try { conn = JdbcUtils.getConnection(); st = conn.createStatement(); String sql = "delete from user where id=" + user.getId(); st.executeUpdate(sql); } catch (SQLException e) { throw new DaoException(e.getMessage(), e); } finally { JdbcUtils.free(rs, st, conn); } } public User findUser(String loginName, String password) { Connection conn = null; PreparedStatement ps = null; ResultSet rs = null; User user = null; try { conn = JdbcUtils.getConnection(); String sql = "select id, name, money, birthday from user where name=?"; ps = conn.prepareStatement(sql); ps.setString(1, loginName); rs = ps.executeQuery(); while (rs.next()) { user = mappingUser(rs); } } catch (SQLException e) { throw new DaoException(e.getMessage(), e); } finally { JdbcUtils.free(rs, ps, conn); } return user; } public User getUser(int userId) { Connection conn = null; PreparedStatement ps = null; ResultSet rs = null; User user = null; try { conn = JdbcUtils.getConnection(); String sql = "select id, name, money, birthday from user where id=?"; ps = conn.prepareStatement(sql); ps.setInt(1, userId); rs = ps.executeQuery(); while (rs.next()) { user = mappingUser(rs); } } catch (SQLException e) { throw new DaoException(e.getMessage(), e); } finally { JdbcUtils.free(rs, ps, conn); } return user; } private User mappingUser(ResultSet rs) throws SQLException { User user = new User(); user.setId(rs.getInt("id")); user.setName(rs.getString("name")); user.setMoney(rs.getFloat("money")); user.setBirthday(rs.getDate("birthday")); return user; } public void update(User user) { Connection conn = null; PreparedStatement ps = null; ResultSet rs = null; try { conn = JdbcUtils.getConnection(); String sql = "update user set name=?, birthday=?, money=? where id=? "; ps = conn.prepareStatement(sql); ps.setString(1, user.getName()); ps.setDate(2, new java.sql.Date(user.getBirthday().getTime())); ps.setFloat(3, user.getMoney()); ps.setInt(4, user.getId()); ps.executeUpdate(); } catch (SQLException e) { throw new DaoException(e.getMessage(), e); } finally { JdbcUtils.free(rs, ps, conn); } } }
写一个类继承运行异常,再以后抛出,要单独进行处理才可以

package com.bird.jdbc.dao; /** * * @use 继承自RuntimeException * * @author Bird * */ public class DaoException extends RuntimeException { /** * */ private static final long serialVersionUID = 1L; public DaoException() { // TODO Auto-generated constructor stub } public DaoException(String message) { super(message); // TODO Auto-generated constructor stub } public DaoException(Throwable cause) { super(cause); // TODO Auto-generated constructor stub } public DaoException(String message, Throwable cause) {//过会调用的就是这个方法 super(message, cause); // TODO Auto-generated constructor stub } } 看样子以后得这样写MVC的JDBC才行


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值