最近项目中需要对mysql进行操作,数据库的知识早在本科毕业那会就忘光了,这几年开发都没接触到数据库的操作。

借这个机会重新学习,数据库访问层是对数据库操作的一个封装,屏蔽底层的数据操作细节,通过使用DAO对数据库进行增删改查操作。

本文将以项目中的一小部分为例,介绍如何编写数据库访问层:

1. 实体类对象

  1. public class CheckInfo {
  2. private Integer id;
  3. private String userName;
  4. private Timestamp checkTime;
  5.  
  6. public Integer getId() {
  7. return id;
  8. }
  9.  
  10. public void setId(Integer id) {
  11. this.id = id;
  12. }
  13.  
  14. public String getUserName() {
  15. return userName;
  16. }
  17.  
  18. public void setUserName(String userName) {
  19. this.userName = userName;
  20. }
  21.  
  22. public Timestamp getCheckTime() {
  23. return checkTime;
  24. }
  25.  
  26. public void setCheckTime(Timestamp checkTime) {
  27. this.checkTime = checkTime;
  28. }
  29.  
  30. @Override
  31. public String toString() {
  32. return "CheckInfo [id=" + id + ", userName=" + userName
  33. + ", checkTime=" + checkTime + "]";
  34. }
  35.  
  36. }

2. 获取数据库连接工具类ConnectionUtil

  1. public class ConnectionUtil {
  2.  
  3. public Connection getConnection() {
  4. String username = "root";
  5. String password = "123456";
  6. String url="jdbc:mysql://localhost:3306/checkin";
  7. String driver="com.mysql.jdbc.Driver";
  8.  
  9. try {
  10. Class.forName(driver);
  11. return DriverManager.getConnection(url, username, password);
  12. } catch (ClassNotFoundException e) {
  13. e.printStackTrace();
  14. } catch (SQLException e) {
  15. e.printStackTrace();
  16. }
  17. return null;
  18. }
  19. }

3. 数据访问层接口

  1. public interface CheckInfoDAO {
  2.  
  3. public boolean save(CheckInfo checkInfo);
  4. public List<CheckInfo> listCheckInfo();
  5.  
  6. }

4. 数据访问层实现

  1. public class CheckInfoDAOImpl implements CheckInfoDAO {
  2.  
  3. @Override
  4. public boolean save(CheckInfo checkInfo) {
  5. boolean flag = false;
  6. ConnectionUtil connUtil = new ConnectionUtil();
  7. Connection conn = null;
  8.  
  9. conn = connUtil.getConnection();
  10.  
  11. PreparedStatement stmt = null;
  12. String sql = "insert into checkinfo values(name, time) values("
  13. + checkInfo.getUserName() + "," + checkInfo.getCheckTime()
  14. + ")";
  15. try {
  16. stmt = conn.prepareStatement(sql);
  17. flag = stmt.execute();
  18. } catch (SQLException e) {
  19. e.printStackTrace();
  20. }
  21.  
  22. return flag;
  23. }
  24.  
  25. @Override
  26. public List<CheckInfo> listCheckInfo() {
  27. List<CheckInfo> checkInfos = new ArrayList<CheckInfo>();
  28.  
  29. ConnectionUtil connUtil = new ConnectionUtil();
  30. Connection conn = null;
  31.  
  32. conn = connUtil.getConnection();
  33.  
  34. PreparedStatement stmt = null;
  35. String sql = "select * from checkinfo";
  36. ResultSet resultSet = null;
  37.  
  38. try {
  39. stmt = conn.prepareStatement(sql);
  40. resultSet = stmt.executeQuery();
  41. while(resultSet.next()) {
  42. CheckInfo ci = new CheckInfo();
  43. ci.setId(resultSet.getInt(1));
  44. ci.setUserName(resultSet.getString(2));
  45. ci.setCheckTime(resultSet.getTimestamp(3));
  46. checkInfos.add(ci);
  47. }
  48. } catch (SQLException e) {
  49. e.printStackTrace();
  50. }
  51.  
  52. return checkInfos;
  53. }
  54.  
  55. }

mysql中的datetime类型对应于java的TimeStamp类型。

5.测试类

  1. public class TestCase {
  2.  
  3. public static void main(String[] args) {
  4.  
  5. testListCheckInfo();
  6. }
  7.  
  8. private static void testListCheckInfo() {
  9. CheckInfoDAO checkInfoDAO = new CheckInfoDAOImpl();
  10. List<CheckInfo> checkInfos = checkInfoDAO.listCheckInfo();
  11.  
  12. for (CheckInfo checkInfo : checkInfos) {
  13. System.out.println(checkInfo);
  14. }
  15. }
  16.  
  17. }

数据库建表语句:

  1. create table if not exists checkinfo (
  2. id int(10) not null primary key auto_increment,
  3. userid varchar(40),
  4. time datetime
  5. );

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. 【转】性能测试,影响 TPS 的一些因素

    首先我们要先了解下TPS的具体含义: TPS(Transaction Per Second):每秒事务数,指服务器在单位时间内(秒)可以处理的事务数量,一般以request/second为单位. 下面 ...

  2. mapreduce编程(一)-二次排序

    转自:http://blog.csdn.net/heyutao007/article/details/5890103 mr自带的例子中的源码SecondarySort,我重新写了一下,基本没变. 这个 ...

  3. 《FPGA全程进阶---实战演练》第一章之如何学习FPGA

    对于很多初学者,大部分都是急于求成,熟不知越是急于求成,最终越是学无所成,到头来两手空空,要学好FPGA,必须弄懂FPGA本质的一些内容. 1.FPGA内部结构及基本原理 FPGA是可以编程的,必须通 ...

  4. 用OpenGL实现跳跃的立体小球

    一.目的 掌握OpenGL中显示列表对象的使用方法. 二.示例代码 Github地址 #include "stdafx.h" #include <GL/glut.h> ...

  5. Luhn算法检验和验证

    一.Luhn公式介绍 Luhn公式是一种广泛使用的系统,用于对标识号进行验证.它根据原始标识号,把每隔一个数字的值扩大一倍.然后把各个单独数字的值加在一起(如果扩大一倍后的值为2个数字,就把这两个数字 ...

  6. Python 中 __all__ 的作用

    1.测试文件foo.py # -*- coding: utf-8 -*- # import sys # reload(sys) # sys.setdefaultencoding('gbk') __al ...

  7. Tomcat5内存简单优化

    tomcat版本:apache-tomcat-5.5.28 解压版tomcat 修改catalina.bat文件,在开头添加如下内容: JAVA_OPTS='-Xms1024m -Xmx2048m - ...

  8. 【CentOS】安装部署jenkins从git获取代码[转]

    持续集成①安装部署jenkins从git获取代码 一:持续集成的概念: 1.1:总体的概括 持续集成Continuous Integration 持续交付Continuous Delivery 持续部 ...

  9. linux中iptables的用法

    iptables基本操作笔记 一.基本操作 #启动防火墙 service iptables start #停止防火墙 service iptables stop #重启防火墙 service ipta ...

  10. PHP数组排序函数array_multisort()函数详解(一)

    PHP中array_multisort可以用来一次对多个数组进行排序,或者根据某一维或多维对多维数组进行排序. 关联(string)键名保持不变,但数字键名会被重新索引. 输入数组被当成一个表的列并以 ...