- java数组入门教程
- java数组的遍历
- 基于debian(ubuntu)的JDK安装与卸载-vps环境搭建实录(一)
- java环境变量配置(windows7系统)
- java开发环境配置
- 第一个java程序 helloword
- 使用eclipse快速开发java程序
- Java基础语法
- Java对象和类
- Java基本数据类型
- Java变量类型
- Java修饰符
- Java运算符
- Java循环结构 – for, while 及 do…while
- Java分支结构 – if…else/switch
- Java Number类
- Java Character类
- Java String类
- Java日期时间
- java异常处理分类
- java Exception异常处理实例
- java.util.UUID 工具类详解
- java数字格式化类DecimalFormat详解
- JDBC系列教程之一:jdbc简单介绍
- JDBC系列教程之二:jdbc连接数据的步骤
- JDBC系列教程之三:JDBC基本的CRUD(创建、读取、更新、删除)
- JDBC系列教程之四:SQL注入PreparedStatement和Statement
- JDBC系列教程之五:数据类型
- JDBC系列教程之六:一个简单用户相关的数据访问层
- JDBC系列教程之七:用配置文件(properties)和反射实现与具体类的耦合
- JDBC系列教程之八:事务-ACID
- JDBC系列教程之九:事务-SavePoint与JTA
- JDBC系列教程之十:隔离级别
- JDBC系列教程之十一:其他的几个API
- JDBC系列教程之十二:DatabaseMetaData(数据库的元数据信息)和ParameterMetaData(参数的元数据信息)
- JDBC系列教程之十三:ResultSetMetaData
- JDBC系列教程之十四:用反射ResultSetMetaData将查询结果读入对象中
- JDBC系列教程之十五:数据源和连接池
- Java 继承
- Java 重写(Override)与重载(Overload)
- Java 多态
- Java 抽象类
- java 封装
- Java 接口
- Java 包(package)
- Java 数据结构
- Java 集合框架
- Java 泛型
- Java序列化
- Java 网络编程
- Java 发送邮件
- Java 多线程编程
- Java Applet基础
- 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
相关问答
更多-
linux 怎样进入单用户模式[2023-12-04]
GRUB 加密码,同时删掉除正常启动以外的启动项目。 这样如果想手动给 GRUB 加单用户模式的启动参数,必须输入 grub 的密码才能修改。 之后把你的 Linux 服务器 BIOS 加密码,不让人随意设置非硬盘启动就行了。 -
Linux单用户维护模式 能做什么操作[2022-10-04]
啥都能干 修改root密码 修改各个级别的启动项 修改网络参数 ...... 不能用的有: 远端用户登录,因为你已经登录了。 Xwindow和X下的所有应用程序。因为X没启动 -
linux 切换到单用户文本控制台,的命令是什么?[2024-03-31]
用root用户登陆,执行 init 1 这个命令;单用户状态下,本身就只有文本模式呀,或者用 init 3 切换到运行级别 3 ! -
简述进入单用户的步骤。[2023-05-09]
系统启动3s内按回车进入grub,按e选“kernel*”再按e进入编辑模式,尾部加上s或single或1,回车进入重启。参考《Linux就该这么学》Linux的安装一篇教程。 -
退出单用户模式(Exit single-user mode)[2023-04-01]
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 将表单用户传递给SQL数据库(Pass forms user to SQL Database)[2023-10-19]
我找到的最好的方法是使用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 ...