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 ...