Java 数据库访问层
最近项目中需要对mysql进行操作,数据库的知识早在本科毕业那会就忘光了,这几年开发都没接触到数据库的操作。
借这个机会重新学习,数据库访问层是对数据库操作的一个封装,屏蔽底层的数据操作细节,通过使用DAO对数据库进行增删改查操作。
本文将以项目中的一小部分为例,介绍如何编写数据库访问层:
1. 实体类对象
public class CheckInfo {
private Integer id;
private String userName;
private Timestamp checkTime;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public Timestamp getCheckTime() {
return checkTime;
}
public void setCheckTime(Timestamp checkTime) {
this.checkTime = checkTime;
}
@Override
public String toString() {
return "CheckInfo [id=" + id + ", userName=" + userName
+ ", checkTime=" + checkTime + "]";
}
}
2. 获取数据库连接工具类ConnectionUtil
public class ConnectionUtil {
public Connection getConnection() {
String username = "root";
String password = "123456";
String url="jdbc:mysql://localhost:3306/checkin";
String driver="com.mysql.jdbc.Driver";
try {
Class.forName(driver);
return DriverManager.getConnection(url, username, password);
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
return null;
}
}
3. 数据访问层接口
public interface CheckInfoDAO {
public boolean save(CheckInfo checkInfo);
public List<CheckInfo> listCheckInfo();
}
4. 数据访问层实现
public class CheckInfoDAOImpl implements CheckInfoDAO {
@Override
public boolean save(CheckInfo checkInfo) {
boolean flag = false;
ConnectionUtil connUtil = new ConnectionUtil();
Connection conn = null;
conn = connUtil.getConnection();
PreparedStatement stmt = null;
String sql = "insert into checkinfo values(name, time) values("
+ checkInfo.getUserName() + "," + checkInfo.getCheckTime()
+ ")";
try {
stmt = conn.prepareStatement(sql);
flag = stmt.execute();
} catch (SQLException e) {
e.printStackTrace();
}
return flag;
}
@Override
public List<CheckInfo> listCheckInfo() {
List<CheckInfo> checkInfos = new ArrayList<CheckInfo>();
ConnectionUtil connUtil = new ConnectionUtil();
Connection conn = null;
conn = connUtil.getConnection();
PreparedStatement stmt = null;
String sql = "select * from checkinfo";
ResultSet resultSet = null;
try {
stmt = conn.prepareStatement(sql);
resultSet = stmt.executeQuery();
while(resultSet.next()) {
CheckInfo ci = new CheckInfo();
ci.setId(resultSet.getInt(1));
ci.setUserName(resultSet.getString(2));
ci.setCheckTime(resultSet.getTimestamp(3));
checkInfos.add(ci);
}
} catch (SQLException e) {
e.printStackTrace();
}
return checkInfos;
}
}
mysql中的datetime类型对应于java的TimeStamp类型。
5.测试类
public class TestCase {
public static void main(String[] args) {
testListCheckInfo();
}
private static void testListCheckInfo() {
CheckInfoDAO checkInfoDAO = new CheckInfoDAOImpl();
List<CheckInfo> checkInfos = checkInfoDAO.listCheckInfo();
for (CheckInfo checkInfo : checkInfos) {
System.out.println(checkInfo);
}
}
}
数据库建表语句:
create table if not exists checkinfo (
id int(10) not null primary key auto_increment,
userid varchar(40),
time datetime
);
Java 数据库访问层的更多相关文章
- XAF使用数据库访问层缓存的提升性能
很多时候,为了提升性能,我们可以给数据库访问层做缓存. 以下几步可以完成这个任务:1. 使用自定义的 XPObjectSpaceProvider1.1. 创建自定义的 XPObjectSpacePro ...
- MVC+Ef项目(3) 抽象数据库访问层的统一入口;EF上下文线程内唯一
抽象一个数据库访问层的统一入口(类似于EF的上下文,拿到上下文,就可以拿到所有的表).实际这个入口就是一个类,类里面有所有的仓储对应的属性.这样,只要拿到这个类的实例,就可以点出所有的仓储,我们在 R ...
- MVC+Ef项目(2) 如何更改项目的生成顺序;数据库访问层Repository仓储层的实现
我们现在先来看看数据库的生成顺序 居然是 Idal层排在第一,而 web层在第二,model层反而在第三 了 我们需要把 coomon 公用层放在第一,Model层放在第二,接下来是 Idal ...
- ASP.NET MVC+EF框架+EasyUI实现权限管理系列(2)-数据库访问层的设计Demo
原文:ASP.NET MVC+EF框架+EasyUI实现权限管理系列(2)-数据库访问层的设计Demo ASP.NET MVC+EF框架+EasyUI实现权限管系列 (开篇) (1)框架搭建 前言:这 ...
- 使用Repository模式构建数据库访问层
使用Repository模式构建数据库访问层 使用ASP.NET Web Api构建基于REST风格的服务实战系列教程[二]——使用Repository模式构建数据库访问层 系列导航地址http:// ...
- GG_DataAccess 数据库访问层使用dapper操作
3.5.GG_DataAccess 数据库访问层使用dapper操作 和Model实体类同理,tt模板已写好,需要的可加qq群:547765059 自己下载.
- (Entity framework 应用篇)把权限判断封装在数据库访问层
这里,我只是以一个例子,说一下简单权限控制,通过这个例子,大家可以设计庞大的权限管理层,把权限控制封装到数据库访问层,这样程序员就不用再写权限判断的代码了 首先,先看看我数据库DBContext的定义 ...
- JDBC连接数据库,数据库访问层
为什么需要JDBC JDBC API DriverManager JDBC驱动 JDBC的功能 JDBC步骤 数据访问层DAO DAO模式的组成 DAO模式的实际应用 为什么需要JDBC? JDBC是 ...
- 使用ASP.NET Web Api构建基于REST风格的服务实战系列教程【二】——使用Repository模式构建数据库访问层
系列导航地址http://www.cnblogs.com/fzrain/p/3490137.html 前言 在数据访问层应用Repository模式来隔离对领域对象的细节操作是很有意义的.它位于映射层 ...
随机推荐
- CSS2.0中最常用的18条技巧
一.使用css缩写 使用缩写可以帮助减少你CSS文件的大小,更加容易阅读. 具体内容请浏览:CSS常用缩写语法 二.明确定义单位,除非值为0. 忘记定义尺寸的单位是CSS新手普遍的错误.在HTML中 ...
- 嵌入式开发值zynq驱动—— zynq SPI Flash 驱动过程
http://blog.csdn.net/pengwangguo/article/details/52292664 http://blog.csdn.net/pengwangguo/article/d ...
- MP3帧时长为26ms的来历
- 【阿里云】WindowsServer2012 搭建FTP站点 图文记录
配置说明: 服务商:阿里云 系统: WindowsServer2012 一:配置FTP服务器 1.进入操作系统,直接从启动栏打开服务器管理器,选择添加功能和角色 2.选择服务器 3.勾选FTP服务器选 ...
- VS 附加进程调试 Web项目
一.新建IIS站点物理路径要指定项目开发Web路径(不可以发布), 二.Host文件网站域名要指定127.0.0.1 三.打开项目目录找到.vs\config\applicationhost.conf ...
- 大爱HTML5 9款超炫HTML5最新动画源码
我们分享过很多漂亮的HTML5动画,包括CSS3菜单.HTML5 Canvas动画等.今天我们精选了9款非常不错的超炫HTML5最新动画及其源码,一起来看看. 1.HTML5可爱的404页面动画 很逗 ...
- http_build_query用法
http_build_query (PHP 5) http_build_query -- 生成 url-encoded 之后的请求字符串描述string http_build_query ( arra ...
- SOAP消息头的处理
SOAP消息头的处理 WebService学习总结(四)——调用第三方提供的webService服务 SOAP中 RPC/ENC 为啥被抛弃
- JSTL XML标签库 使用
推荐博客:http://blog.sina.com.cn/s/blog_4f925fc30101820u.html XML标签库 JSTL提供了操作xml文件的标签库,使用xml标签库可以省去使用Do ...
- hql Hibernate.gethibernatetemplate()
1. find(String hql); //普通查询 示例:this.gethibernateTemplate().find("from User"); 2. find(Str ...