JDBC之二:DAO模式

@(JAVA)[java]

详细代码请参见 https://github.com/lujinhong/dao

一、前期准备

1、创建数据库

create database filter_conf;

2、创建表并插入数据

create table T_CATEGORY(cid Int, title varchar(256), sequnce int, deleted int);insert into T_CATEGORY values(1,lujinhong,1,1);

3、准备pom.xml

我习惯使用maven作包管理,因此在pom.xml中加入以下内容:

<dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.36</version>
</dependency>

OK,开工写代码

二、java创建

1、创建Dao接口。

package com.ljh.jasonnews.server.dao;
import java.sql.Connection;
public interface Dao {  public Connection getConnection() throws DaoException;
}

2、创建BaseDao类,实现Dao接口,主要完成数据库的打开与关闭

package com.ljh.jasonnews.server.dao;import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;public class DaoBase implements Dao {@Overridepublic Connection getConnection() throws DaoException {try {//注册JDBC驱动程序Class.forName("com.mysql.jdbc.Driver");//打开一个数据库连接String URL = "jdbc:mysql://1.2.3.4:3306/filter_conf";String USERNAME = "lujinhong";String PASSWORD = "lujinhong";Connection conn = DriverManager.getConnection(URL,USERNAME,PASSWORD);return conn;//return dataSource.getConnection();} catch (Exception e) {e.printStackTrace();throw new DaoException();}}protected void closeDbObject(ResultSet rs, Statement stmt, Connection conn){if(rs != null){try {rs.close();} catch (SQLException e) {e.printStackTrace();}}if(stmt != null){try {stmt.close();} catch (SQLException e) {e.printStackTrace();}}if(conn != null){try {conn.close();} catch (SQLException e) {e.printStackTrace();}}}}

3、创建DaoException。

 package com.ljh.jasonnews.server.dao;public class DaoException extends Exception{private String message;public DaoException(){}public DaoException(String message){this.message = message;}public String getMessage() {return message;}public void setMessage(String message) {this.message = message;}public String toString(){return message;}}

以上为jdbc DAO模式的基本步骤,主要用于获取连接及异常处理。

以下步骤对于每个表均要进行新增类(Dao,***DaoImpl,model.)以及在类中新增方法(DaoFactory)。

4、创建DaoFactory类,用于生产Dao对象。

对于较少的连接,可以在factory中每次直接new 一个***DaoImpl对象,如本例。
对于某些较多的连接,可能需要使用连接池等限制连接数量,说见本文最后面。

package com.ljh.jasonnews.server.dao.factory;import com.ljh.jasonnews.server.dao.CategoryDao;
import com.ljh.jasonnews.server.dao.impl.CategoryDaoImpl;public class DaoFactory {public static CategoryDao getCategoryDao() {return new CategoryDaoImpl();}
}5、创建Model类。package com.ljh.jasonnews.server.model;public class Category {public int getCid() {return cid;}public void setCid(int cid) {this.cid = cid;}public String getTitle() {return title;}public void setTitle(String title) {this.title = title;}public int getSequnce() {return sequnce;}public void setSequnce(int sequnce) {this.sequnce = sequnce;}public int getDeleted() {return deleted;}public void setDeleted(int deleted) {this.deleted = deleted;}private int cid;private String title;private int sequnce = 0;private int deleted = 0;
}

6、创建***Dao接口,继承Dao接口。

package com.ljh.jasonnews.server.dao;import java.util.List;
import com.ljh.jasonnews.server.model.Category;public interface CategoryDao extends Dao{public List getCategoryList() throws DaoException;
}

7、创建***DaoImpl类,继承DaoBase类。

package com.ljh.jasonnews.server.dao.impl;import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;import com.ljh.jasonnews.server.dao.CategoryDao;
import com.ljh.jasonnews.server.dao.DaoBase;
import com.ljh.jasonnews.server.dao.DaoException;
import com.ljh.jasonnews.server.model.Category;public class CategoryDaoImpl extends DaoBase implements CategoryDao {@Overridepublic List getCategoryList() throws DaoException{String GET_CATEGORY_SQL = "SELECT * FROM T_CATEGORY";List categoryList = new ArrayList();Connection conn = null;PreparedStatement pStatment =null;ResultSet rs = null;try{conn = getConnection();System.out.println("a");pStatment = conn.prepareStatement(GET_CATEGORY_SQL);System.out.println("b");rs = pStatment.executeQuery();System.out.println("c");while(rs.next()){Category category = new Category();category.setCid(rs.getInt("cid"));category.setTitle(rs.getString("title"));category.setSequnce(rs.getInt("sequnce"));category.setDeleted(rs.getInt("deleted"));categoryList.add(category);}}catch(Exception e){throw new DaoException("Erorr getting Categorys. " + e.getMessage());}finally{closeDbObject(rs, pStatment, conn);}   return categoryList;}
}

其它说明:

1、创建TestCase,测试数据库连接。

package com.ljh.jasonnews.server.dao.test;import java.util.Iterator;
import java.util.List;
import org.junit.Test;
import com.ljh.jasonnews.server.dao.CategoryDao;
import com.ljh.jasonnews.server.dao.impl.CategoryDaoImpl;
import com.ljh.jasonnews.server.model.Category;public class CategoryDaoTest {@Testpublic void test() throws Exception{CategoryDao categoryDao = DaoFactory.getCategoryDao();List categoryList = categoryDao.getCategoryList();Iterator iterator = categoryList.iterator();while(iterator.hasNext()){Category category = iterator.next();System.out.println(category.getCid()+" "+ category.getTitle()+" "+category.getSequnce()+" "+ category.getDeleted()+"  ");}   }
}

2、在数据库中访问数据,最重要且最费时的操作经常是建立连接。按规则,设计良好的应用程序数据库连接应该始终是采用连接池的。

一般而言,使用连接池有以下三种方法:

  • Apache Commons DBCP
  • C3p0
  • Tomcat7中的Tomcat JDBCConnection Pool

    使用Tomcat的项目,建立直接使用TomcatJDBC Connection Pool。调用DataSource.getConnection()方法比较快,因为连接永远不会被关闭:关闭连接时,只要将连接返回池中即可。但是,JNDI查找比较慢,因此,被返回的DataSource经常会被缓存起来。

注:

(1)在调试中,未能使用连接池完成数据库连接,因此本示例中未使用连接池,关于连接池,可参考DataSourceCache.java,但关键是context.xml与web.xml中的配置。

(2)在需要调用context相关的应用中,不能直接使用junit进行测试,而必须创建一个jsp或者servlet,否则,在以下代码中会报错:

 Context envContext = (Context)context.lookup("java:/comp/env");

(3)作用连接池有JNDI及依赖注入2种方式,目前更推荐使用依赖注入。

JDBC之二:DAO模式相关推荐

  1. 03-JDBC与Dao模式

    1.JDBC API 2. DAO模式

  2. DAO模式设计-JDBC连接Mysql数据库实现增删改查及JunitTest单元测试

     概念介绍 JDBC JDBC(Java数据库连接,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成.JDBC ...

  3. Java Dao模式通过JDBC连接数据库的操作

    Java程序访问数据库: 1.获取数据库厂商提供的驱动(jdbc接口的实现类) 如ojdbc14.jar--Oracle数据库驱动jar包 mysql-connector-java-5.1.8-bin ...

  4. java 关于JDBC和DAO模式使用

    JDBC(全称:Java Data Base Connectivity)是java数据库连接简称 ,提供连接各种数据库的能力 JDBC API主要的功能: 与数据库建立连接 执行SQL语句 处理结果 ...

  5. 13.JavaAPI(DAO模式+图书管理系统控制台版本)

    目录 一.理解程序设计分层的思想 二.DAO设计模式的组成以及各部分的开发 2.1 概述 2.2 DAO模式作用 2.3 DAO模式组成 三.DAO模式实现图书信息管理系统控制台版本之增删改查 3.1 ...

  6. JDBC - 开发实例 - MVC模式

    JDBC - 开发实例 - MVC模式  1. 在web.xml中配置连接数据库的信息 web.xml: <context-param> <param-name>server& ...

  7. 024_jdbc-mysql的Dao模式

    1. 新建一个JDBCDao工程, 使用我们之前的JDBCUtil.java和jdbc.properties属性文件 2. Dao模式: Data Access Object数据访问对象. 3. 新建 ...

  8. java mysql dao_Java DAO 模式

    哈哈哈哈哈...呃~参考文章 DAO 模式 DAO (DataAccessobjects 数据存取对象)是指位于业务逻辑和持久化数据之间实现对持久化数据的访问.通俗来讲,就是将数据库操作都封装起来. ...

  9. java dao模式_Java DAO 模式

    DAO 模式 DAO (DataAccessobjects 数据存取对象)是指位于业务逻辑和持久化数据之间实现对持久化数据的访问.通俗来讲,就是将数据库操作都封装起来. 对外提供相应的接口 在面向对象 ...

最新文章

  1. Opera浏览器无法观看土豆 优酷 新浪视频的解决办法!
  2. DOS命令大全(转)
  3. 自主招生计算机专业自我介绍,自主招生自我介绍参考范文
  4. android 如何保留数据两位小数
  5. Scala println的实现原理调试
  6. 【Pytorch神经网络理论篇】 26 基于空间域的图卷积GCNs(ConvGNNs):定点域+谱域+图卷积的操作步骤
  7. idea 启动 springBoot debug很慢,正常启动很快是什么原因
  8. 图片渲染延迟_2D Canvas 的渲染优化
  9. SIP协议栈基础笔记
  10. 深入理解java内置锁(synchronized)和显式锁(ReentrantLock)
  11. win下使用VM虚拟机安装Linux系统
  12. C++程序设计:字符图形输出(空白三角形)
  13. C语言知识点--define的替换列表为空是怎么回事?
  14. 解码jpg图片c语言,图像解码之一——使用libjpeg解码jpeg图片
  15. 问佛----如果浮躁了,静下来看看
  16. 软件测试零基础入门好学吗?
  17. 深耕物料处理赛道,宏工科技助力涂料绿色自动化生产
  18. FPGA学习之数模转换(TLC5620)(通过4个按键输入,输出数模转换需要的数据和数码管显示需要的数据)
  19. 5000元起家,40年4万倍!一个来自贫民窟的亿万富翁
  20. GDUFS 2018信息学院程序设计新手赛(正式赛)Java版题解

热门文章

  1. 报错:selenium.common.exceptions.SessionNotCreatedException: Message: session not created: This versio
  2. python Thread 函数_Python系列学习笔记
  3. 4行代码解决:L1-057 PTA使我精神焕发 (5分)
  4. 15行代码AC——Link/Cut Tree CodeForces - 614A(爆long long处理+快速幂讲解)
  5. python不定长参数详解
  6. labuladong的算法小抄pdf_真漂亮!这份GitHub上爆火的算法面试笔记,助你圆满大厂梦...
  7. RT-Thread工程代码框架分析——(1)启动流程
  8. java接收c语言的结构体
  9. linux实时线程调度bug,linux中采用用户级线程模拟实现EDF和RMS两种处理机实时调度算法之改进...
  10. excel自动生成舒尔特表_财务总监:超完美Excel全套账财务系统,自动生成报表,收好喽...