最近项目中需要对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 数据库访问层的更多相关文章

  1. XAF使用数据库访问层缓存的提升性能

    很多时候,为了提升性能,我们可以给数据库访问层做缓存. 以下几步可以完成这个任务:1. 使用自定义的 XPObjectSpaceProvider1.1. 创建自定义的 XPObjectSpacePro ...

  2. MVC+Ef项目(3) 抽象数据库访问层的统一入口;EF上下文线程内唯一

    抽象一个数据库访问层的统一入口(类似于EF的上下文,拿到上下文,就可以拿到所有的表).实际这个入口就是一个类,类里面有所有的仓储对应的属性.这样,只要拿到这个类的实例,就可以点出所有的仓储,我们在 R ...

  3. MVC+Ef项目(2) 如何更改项目的生成顺序;数据库访问层Repository仓储层的实现

    我们现在先来看看数据库的生成顺序   居然是 Idal层排在第一,而 web层在第二,model层反而在第三 了   我们需要把 coomon 公用层放在第一,Model层放在第二,接下来是 Idal ...

  4. ASP.NET MVC+EF框架+EasyUI实现权限管理系列(2)-数据库访问层的设计Demo

    原文:ASP.NET MVC+EF框架+EasyUI实现权限管理系列(2)-数据库访问层的设计Demo ASP.NET MVC+EF框架+EasyUI实现权限管系列 (开篇) (1)框架搭建 前言:这 ...

  5. 使用Repository模式构建数据库访问层

    使用Repository模式构建数据库访问层 使用ASP.NET Web Api构建基于REST风格的服务实战系列教程[二]——使用Repository模式构建数据库访问层 系列导航地址http:// ...

  6. GG_DataAccess 数据库访问层使用dapper操作

    3.5.GG_DataAccess 数据库访问层使用dapper操作 和Model实体类同理,tt模板已写好,需要的可加qq群:547765059  自己下载.

  7. (Entity framework 应用篇)把权限判断封装在数据库访问层

    这里,我只是以一个例子,说一下简单权限控制,通过这个例子,大家可以设计庞大的权限管理层,把权限控制封装到数据库访问层,这样程序员就不用再写权限判断的代码了 首先,先看看我数据库DBContext的定义 ...

  8. JDBC连接数据库,数据库访问层

    为什么需要JDBC JDBC API DriverManager JDBC驱动 JDBC的功能 JDBC步骤 数据访问层DAO DAO模式的组成 DAO模式的实际应用 为什么需要JDBC? JDBC是 ...

  9. 使用ASP.NET Web Api构建基于REST风格的服务实战系列教程【二】——使用Repository模式构建数据库访问层

    系列导航地址http://www.cnblogs.com/fzrain/p/3490137.html 前言 在数据访问层应用Repository模式来隔离对领域对象的细节操作是很有意义的.它位于映射层 ...

随机推荐

  1. WPF Tutorial - Using A Visual Collection

    While WPF and XAML make the common 90% of UI programming quite easy, sometimes it gets a little odd ...

  2. jspSmartUpload使用初步

    jsp中使用SmartUpload上传文件 1.下载jspSmartUpload组件后,解压缩.把com目录复制到应用程序的WEB-INF\classes目录下. 2.尤其注意 (1)文件上传表单要添 ...

  3. 1、Maven安装教程详解

    一.准备工作  1.确定电脑上已经成功安装jdk7.0以上版本                 2.win10操作系统                 3.maven安装包            下载 ...

  4. 原创:用VBA实现将鼠标选择的单元格按照指定格式合并并复制到剪切板

    原创:用VBA实现将鼠标选择的单元格按照指定格式合并并复制到剪切板 一.主要实现以下功能:1.用鼠标选择单元格(可谓连续单元格,也可为不连续的)后,按照要求格式“证件号码:+选定内容+“,”+”选定内 ...

  5. repo sync出现“fatal: '../platform/abi/cpp.git' does not appear to be a git repository”的解决方案

    在我下载Android源代码时,在最后一步调用repo sync,出现“fatal: '../platform/abi/cpp.git' does not appear to be a git rep ...

  6. 回想sql语句中的各种连接

    1. 内连接(Inner Join) 内连接是最常见的一种连接,它页被称为普通连接,而E.FCodd最早称之为自然连接. 以下是ANSI SQL-92标准 select * from    t_ins ...

  7. EF5+MVC4系列(7) 后台SelectListItem传值给前台显示Select下拉框;后台Action接收浏览器传值的4种方式; 后台Action向前台View视图传递数据的四种方式(ViewDate,TempDate,ViewBag,Model (实际是ViewDate.Model传值))

    一:后台使用SelectListItem 传值给前台显示Select下拉框 我们先来看数据库的订单表,里面有3条订单,他们的用户id对应了 UserInfo用户表的数据,现在我们要做的是添加一个Ord ...

  8. 设置 sqlserver Profiler 只监控 EF的sql执行请求

    当我们用EF执行语句的时候,可以使用 sqlserver Profiler来监控到底执行了哪些sql语句,但是默认他是监控全局的,我们只想监控Ef的语句,这里如下设置 这样就只会监控 EF产生的 sq ...

  9. RabbitMQ学习笔记(一):安装及Springboot集成

    前言 MQ,即消息队列Message Queue的缩写. RabbitMQ 是MQ的一种,就像招商银行是银行的一种一样.主要是用来实现应用程序的异步和解耦,同时也能起到消息缓冲,消息分发的作用. 消息 ...

  10. oracle装载表是什么?

    oracle装载表即通过sqlloader的方式导入数据. Oracle 的SQL*LOADER可以将外部数据加载到数据库表中.下面是SQL*LOADER的基本特点: 1)能装入不同数据类型文件及多个 ...