jdbc之二:DAO模式
详细代码请参见 https://code.csdn.net/jediael_lu/daopattern
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 { @Override
public Connection getConnection() throws DaoException {
// DataSource dataSource = DataSourceCache.getInstance().getDataSource();
try {
//注册JDBC驱动程序
Class.forName("oracle.jdbc.OracleDriver");
//打开一个数据库连接
String URL = "jdbc:oracle:thin:@172.16.80.155:1521:nfirms";
String USERNAME = "geeknews";
String PASSWORD = "Lu123456"; 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对象。
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<Category> 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 { @Override
public List<Category> getCategoryList() throws DaoException{ String GET_CATEGORY_SQL = "SELECT * FROM T_CATEGORY"; List<Category> categoryList = new ArrayList<Category>(); 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 { @Test
public void test() throws Exception{
CategoryDao categoryDao = new CategoryDaoImpl();
List<Category> categoryList = categoryDao.getCategoryList();
Iterator<Category> iterator = categoryList.iterator();
while(iterator.hasNext()){
Category category = iterator.next();
System.out.println(category.getCid()+" "+ category.getTitle()+" "+category.getSequnce()+" "+ category.getDeleted()+" ");
} } }
2、在数据库中访问数据,最重要且最费时的操作经常是建立连接。按规则,设计良好的应用程序数据库连接应该始终是采用连接池的。
一般而言,使用连接池有以下三种方法:
l Apache Commons DBCP
l C3p0
l 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模式的更多相关文章
- jdbc之二:DAO模式 分类: B1_JAVA 2014-04-29 15:13 1536人阅读 评论(0) 收藏
详细代码请参见 https://github.com/lujinhong/dao 一.前期准备 1.创建数据库 create database filter_conf; 2.创建表并插入数据 crea ...
- 2、原生jdbc的dao模式
一.dao模式 (data access object)1.作用:持久层,专门操作数据的层次结构,不掺杂任何的业务和其他内容2.dao组成部分: a.数据库工厂类 b.数据实体类 javabean p ...
- Javaweb学习笔记——(十七)——————JDBC的原理、四大核心类、四大参数、预编译、Dao模式、批处理、大数据、时间类型的转换
JDBC入门 *导入jar包:驱动 *加载驱动类:Class.forName("类名"); *给出url.username.password,其中url背下来 *使用DriverM ...
- Java Dao模式通过JDBC连接数据库的操作
Java程序访问数据库: 1.获取数据库厂商提供的驱动(jdbc接口的实现类) 如ojdbc14.jar——Oracle数据库驱动jar包 mysql-connector-java-5.1.8-bin ...
- jdbc mysql crud dao模型 sql注入漏洞 jdbc 操作大文件
day17总结 今日内容 l JDBC 1.1 上次课内容总结 SQL语句: 1.外键约束:foreign key * 维护多个表关系! * 用来保证数据完整性! 2.三种关系: * 一对多: * 一 ...
- 第七章 DAO模式
第七章 DAO模式 一.JDBC的封装 1.JDBC的封装: DAO位于业务逻辑和持久化数据之间,实现对持久化数据的访问.将数据库都封装起来,对外提供相应的接口 2.DAO模式的作用: 1.隔离业务逻 ...
- 熟悉DAO模式的用法
今天主要是使用DAO模式. DAO模式通过对业务层提供数据抽象层接口,实现了以下目标: 1. 数据存储逻辑的分离 通过对数据访问逻辑进行抽象,为上层机构提供抽象化的数据访问接口.业务层无需关心具体的s ...
- 数据持久化以及DAO模式的简单使用
持久化:(是将程序中的数据在瞬时状态和持久状态间转换机制) 即把数据(如内存中的对象)保存到可永久保存的存储设备中(如磁盘).持久化的主要应用是将内存中的对象存储在关系型的数据库中,当然 ...
- CDC不同模式在ODI体现系列之二 异步模式
CDC不同模式在ODI体现系列之二 异步模式 2 异步模式需要在数据库中做一些准备工作: 改数据为归档并启用logminer: SQL> shutdown immediate 数据库已经关闭. ...
随机推荐
- poj2774 Long Long Message(后缀数组or后缀自动机)
转载请注明出处: http://www.cnblogs.com/fraud/ ——by fraud Long Long Message Time Limit: 4000MS Me ...
- 1、Servlet 2、ServletConfig 3、ServletContext 4、HttpUrlConnection
1.Servlet 2.ServletConfig 3.ServletContext 4.HttpUrlConnection 07. 五 / J2EE / 没有评论 一.第一个Servlet的编写 ...
- sqlCacheDependency 更新缓存Cache
第一步 修改web,config <!--定义数据库连接--> <connectionStrings> <add name="NorthwindConnect ...
- 轻量jquery框架之--组件交互基础设计
概要 组件交互基础,即考虑在JQUERY对象下($)下扩展所有组件都需要用到的通用api,如ajax入口.对表单的操作.html片段加载.通用的配合datagrid通用的curd客户端对象等. 扩展a ...
- kafka-manager安装
代码地址: https://github.com/yahoo/kafka-manager 注意只能使用 Java 7!Java 6 编译不通过,Java 8 在运行的时候会报错:java.lang.U ...
- debian安装缺少网卡驱动rtl_nic/rtl8168e-2.fw和bcm43xx-0.fw
最近拿了公司一台旧笔记本来装debian玩,刻好盘之后安装,发现网卡驱动都无法装上. 这是因为这些网卡驱动不是开源的,顽固的debian便将他们从驱动列表中移除了... 我从debian官方找到了这两 ...
- centos源码安装git
因为Centos上yum安装的话可能版本比较低,使用中会有一些难以预料的问题出现. 从源代码编译安装方法: #Centos执行: yum install curl-devel expat-devel ...
- php 实现传入参数的传出
类似于.net的out功能,php中可以使用&实现 如下示例: <?php$x=2; inOutFunction($x); function inOutFunction(&$x) ...
- JS--switch 语句
说明:js中switch语句的语法风格 function convert(x){ switch(x) { case "string": document.write("s ...
- 从客户端(******)中检测到有潜在危险的 Request.Form 值。
在 提交表单时候,asp.net 提示:"从客户端(......)中检测到有潜在危险的 Request.Form 值" .asp.net中的请求验证特性提供了某一等级的保护措施防止 ...