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模式来隔离对领域对象的细节操作是很有意义的.它位于映射层 ...
随机推荐
- 切换tab页
//切换Tab页 $('#tt').tabs({ border:false, onSelect:function(title){ ...
- ggplot ggplot2 画图
折线图-ggplot2 http://blog.163.com/yugao1986@126/blog/static/6922850820131161531421/http://blog.sina.c ...
- Linux gcc编译之-std选项
用GCC编译代码时候后面带有-std=c++1z 的选项,这是指定c/c++的标准.具体的标准如下,详细信息可以看引用里面的详细说明
- http://www.gasi.ch/blog/inside-deep-zoom-2/
Inside Deep Zoom – Part II: Mathematical Analysis Welcome to part two of Inside Deep Zoom. In part o ...
- 关于Unity中地形的创建
地形创建 Raw图片格式是Unity可以导出的图片格式 Unity很强大,可以直接使用psd文件 地形创建实例 1.创建Unity工程和文件目录1:创建一个地形Terrain: GameObject- ...
- 关于Unity中的本地存储
本地存储 在做游戏的时候,经常需要在本机存储一些数据,比如闯关类游戏要记录闯到第几关,做单机的时候要把数据保存到本地,下次启动的时候数据存在,就是把数据保存到磁盘里面或者手机的flash闪存里面. U ...
- 用OpenGL进行曲线、曲面的绘制
实验目的 理解Bezier曲线.曲面绘制的基本原理:理解OpenGL中一维.二维插值求值器的用法. 掌握OpenGL中曲线.曲面绘图的方法,对比不同参数下的绘图效果差异: 代码1:用四个控制点绘制一条 ...
- 第三百四十五节,Python分布式爬虫打造搜索引擎Scrapy精讲—爬虫和反爬的对抗过程以及策略—scrapy架构源码分析图
第三百四十五节,Python分布式爬虫打造搜索引擎Scrapy精讲—爬虫和反爬的对抗过程以及策略—scrapy架构源码分析图 1.基本概念 2.反爬虫的目的 3.爬虫和反爬的对抗过程以及策略 scra ...
- Mac 创建证书(以 创建gdb证书 为例 )
open /Applications/Utilities/Keychain\ Access.app/ 打开 钥匙串访问 继续继续 创建完毕. Now that we have a certificat ...
- Eclipse中创建Maven项目失败
Eclipse中创建Maven项目报错:Unable to create project from archetype org.apache.maven.archetypes:maven-archet ...