JAVA概述
第一部分:java入门基础
第二部分:java常用类
第三部分:jdbc系列教程
第四部分:java高级特征
java8新特征详解
java文件操作专题教程

知识点

相关文章

更多

最近更新

更多

JDBC系列教程之六:一个简单用户相关的数据访问层

2019-02-28 23:09|来源: 领悟书生

一个简单用户相关的数据访问层

l  J2EE三层架构简介

       表示层、业务逻辑层、数据访问层,三层之间用接口隔离。


l  定义domain对象User,定义存取用户的接口

User.java

package com.hyneng.jdbc.domain;

import java.util.Date;

/**

* 2010-10-07

* @author HuangYineng

*/

public class User {

   private int id;

   private String name;

   private Date birthday;

   private float money;

   

   ...(setXXX,getXXX)

}

UserDao.java

package com.hyneng.jdbc.dao;

import com.hyneng.jdbc.domain.User;

/**

* 2010-10-07

* @author HuangYineng

*/

public interface UserDao {

   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);

}

l  用JDBC实现接口

UserDaoJdbcImpl.java

package com.hyneng.jdbc.dao.impl;

import java.sql.Connection;

import java.sql.PreparedStatement;

import java.sql.ResultSet;

import java.sql.SQLException;

import java.sql.Statement;

import com.hyneng.jdbc.JdbcUtils;

import com.hyneng.jdbc.dao.DaoException;

import com.hyneng.jdbc.dao.UserDao;

import com.hyneng.jdbc.domain.User;

/**

* 2010-10-07

* @author HuangYineng

*/

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);

      }

   }

}

DaoException.java

package com.hyneng.jdbc.dao;

/**

* 2010-10-07

* @author HuangYineng

*/

public class DaoException extends RuntimeException {

   private static final long serialVersionUID = 1L;

   public DaoException() {

   }

   public DaoException(String message)  {

      super(message);

   }

   public DaoException(Throwable  cause) {

      super(cause);

   }

   public DaoException(String message,  Throwable cause) {

      super(message, cause);

   }

}

本文链接:JDBC系列教程之六:一个简单用户相关的数据访问层,转自请注明:http://www.656463.com/article/800

相关问答

更多
  • GRUB 加密码,同时删掉除正常启动以外的启动项目。 这样如果想手动给 GRUB 加单用户模式的启动参数,必须输入 grub 的密码才能修改。 之后把你的 Linux 服务器 BIOS 加密码,不让人随意设置非硬盘启动就行了。
  • 啥都能干 修改root密码 修改各个级别的启动项 修改网络参数 ...... 不能用的有: 远端用户登录,因为你已经登录了。 Xwindow和X下的所有应用程序。因为X没启动
  • 用root用户登陆,执行 init 1 这个命令;单用户状态下,本身就只有文本模式呀,或者用 init 3 切换到运行级别 3 !
  • 系统启动3s内按回车进入grub,按e选“kernel*”再按e进入编辑模式,尾部加上s或single或1,回车进入重启。参考《Linux就该这么学》Linux的安装一篇教程。
  • SSMS通常在后台数据库中使用多个连接。 在更改访问模式之前,您将需要终止这些连接。 首先,确保对象资源管理器指向像master那样的系统数据库。 其次,执行一个sp_who2,并找到数据库'my_db'的所有连接。 通过执行KILL { session id }杀死所有连接,其中会话ID是sp_who2列出的SPID 。 三,打开一个新的查询窗口。 执行以下代码。 -- Start in master USE MASTER; -- Add users ALTER DATABASE [my_db] SET ...
  • 我对Sql CE有很好的体验,在您描述的场景下,这似乎是一个非常合理的解决方案。 它具有比单独的解决方案更简单的部署优势,我认为这对于您描述的简单应用来说是非常重要的。 事实上,我现在在我的个人项目中使用Linq2Sql。 :) I've had good experiences with Sql CE, that seems like a very reasonable solution given the scenario you're describing. It has the added adva ...
  • 将String更改为string (小写's')。 大写的S使它无效,你得到第二个错误。 由于该定义无效,因此当您尝试在布局中引用它时会出现第一个错误。 Change String to string (lowercase 's'). The uppercase S makes it invalid and you get the second error. Since that definition is invalid, you get the first error when you try to r ...
  • 您应该了解Odoo安全机制的基本概念。 按照以下步骤: 创建安全组 授予特定用户访问权限 例如: Only Admin can see 将组添加到您的字段 例如:
  • 我找到的最好的方法是使用SET CONTEXT_INFO ,它完全按照我的SET CONTEXT_INFO行事。 这样做的缺点是需要将当前用户ID传递给存储库中的每个函数,因为我没有找到自动将其传递给连接(构造函数)的方法。 如果我找到一种方法将用户从控制器传递到模型容器,我将更新此答案。 (参见https://msdn.microsoft.com/en-us/library/ms187768.aspx ) The best way I found is to use SET CONTEXT_INFO, w ...
  • 在开始转储之前发出FLUSH TABLES WITH READ LOCK语句的FLUSH TABLES WITH READ LOCK ,有关详细信息,请参阅http://dev.mysql.com/doc/refman/5.0/en/lock-tables.html 。 从选址链接: MySQL使客户端会话能够显式获取表锁,以便与其他会话协作以访问表,或者防止其他会话在会话需要对其进行独占访问期间修改表 。 会话只能为自己获取或释放锁。 一个会话无法获取另一个会话的锁定或释放另一个会话持有的锁定。 Issu ...