【DAO】基于apache.commons.dbcp的DAO数据层的代码

  ************************************************************************
  ****原文:blog.csdn.net/clark_xu 徐长亮的专栏
  ************************************************************************

           DAO的代码主要是基于oracle默认用户scott用户的 dept(部门列表)emp(员工信息列表)进行查询,增加等。其中JDBC连接oracle的连接池使用apache.commons.dbcp来实现。

     项目中分为4个类:实体类entery.Dept 对象保存scott.dept表中的一行。utils.DButils类创建jdbc连接池。DAO类 dao.DeptDao类提供为Dept操作的sql语句。index.index为main函数的测试类

技术分享

           如上,需要buildpath导入jar:

     (1)apache.commons类:commons-collections4-4.0.jar commons-pool-1.6.jar commons-dbcps-1.4.jar

    (2)oracle.jdbc类: class12.jar

 

  第一步,创建实例类entry.Dept()

  Dept表有三个字段:deptno部门编号,dname部门名称,loc地点

package entry;

public class Dept {
	private  int deptno;
	private   String dname;
	private   String loc;
	
	
	
	@Override
	public String toString() {
		return deptno+" "+dname+" "+loc;
	}



	public int getDeptno() {
		return deptno;
	}



	public void setDeptno(int deptno) {
		this.deptno = deptno;
	}



	public String getDname() {
		return dname;
	}



	public void setDname(String dname) {
		this.dname = dname;
	}



	public String getLoc() {
		return loc;
	}



	public void setLoc(String loc) {
		this.loc = loc;
	}
	
}


         第二步,创建oracle数据库的连接类。

使用Properties文件保存oracle数据库url,user,password,driver名称

创建名字为property的文件内容为:

driver=oracle.jdbc.OracleDriver
url=jdbc:oracle:thin:@127.0.0.1:1521:rundb
user=scott
password=tiger

代码如下: 从文件读取url,user,password

创建openConneciton方法来实现创建jdbc连接池,具体使用apache.commons.dbcp.BasicDataSources对象

package utils;

import java.io.IOException;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.Properties;

import org.apache.commons.dbcp.BasicDataSource;
public class DButils {
	private static String url;
	private static String driver;
	private static String user;
	private static String password;
	static{
		Properties props=new Properties();
	try {
		//从类路径加载文件
		props.load(DButils.class.getClassLoader().getResourceAsStream("utils/property"));
	} catch (IOException e1) {
		// TODO Auto-generated catch block
		System.out.println("找不到密码文件");
		e1.printStackTrace();
	}
	user=props.getProperty("user");
	url=props.getProperty("url");
	driver=props.getProperty("driver");
	password=props.getProperty("password");
	}
	/**
	 * 类方法
	 * @return Conneciton
	 * @throws SQLException
	 */
	public static Connection openConnection() throws SQLException{
		BasicDataSource ds=new BasicDataSource();
		ds.setDriverClassName(DButils.driver);
		ds.setUrl(DButils.url);
		ds.setUsername(DButils.user);
		ds.setPassword(DButils.password);
		//初始化格式
		ds.setInitialSize(10);
		//最大空闲连接个数
		ds.setMaxIdle(50);
		ds.setMaxActive(50);
		Connection con=ds.getConnection();
		return con;
	}
}

   第四步,创建DAO类,通过创建不同的方法来实现sql语句操作数据库,利用List<Dept>对象保存表的所有记录。每个Dept对象保存dept表中的某行。

  定义一种方法findAll()方法来查询dept表的内容。

package dbo;
import entry.Dept;
import utils.DButils;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
public class DeptDAO {		
		private static final String FIND_ALL=
			"select deptno,dname,loc from dept";
		
		public  List<Dept> findAll() throws SQLException{
			Connection con=null;
			con=DButils.openConnection();
			PreparedStatement stmt=con.prepareStatement(FIND_ALL);
			ResultSet rs=stmt.executeQuery();
			//定义集合
			List<Dept> deptlist=new ArrayList<Dept>();
			Dept d = null;
			while((rs.next())){
				int deptno = rs.getInt("deptno");
				String dname = rs.getString("dname");
				String loc = rs.getString("loc");
//				deptlist.add(toDept(rs));
				d = new Dept();
				d.setDeptno(deptno);
				d.setDname(dname);
				d.setLoc(loc);
				System.out.println(d.toString());
//				System.out.println(mydept.toString());
				//添加到集合
				 deptlist.add(d);

				 System.out.println(deptlist.toString());
			}
			return deptlist;
		}
}


 第五步,创建main的测试代码

package index;
import java.sql.SQLException;
import java.util.List;
import dbo.DeptDAO;
import entry.Dept;
public class index {
	public static void main(String[] args) throws SQLException {
		DeptDAO deptdao=new DeptDAO();
		List<Dept> deptlist=deptdao.findAll();
//		System.out.println(deptlist.toString());
/*		for(int i=0;i<deptlist.size();i++){
			Dept d = deptlist.get(i);
			System.out.println(d.toString());
		}
*/
	}
}


 第六步,使用main函数进行代码测试,很不方便。建议使用JUnit进行单元测试。创建JUnit测试类DeptDAOTest.java

package index;

import java.sql.SQLException;
import java.util.List;
import org.junit.Test;
import dbo.DeptDAO;
import entry.Dept;

public class DeptDAOTest {
	/**
	 * 测试findAll方法
	 * @throws SQLException 
	 */
	@Test
	public void testfindAll() throws SQLException{
		DeptDAO deptdao=new DeptDAO();
		List<Dept> deptlist=deptdao.findAll();
		for(Dept o:deptlist){
			System.out.println("部门号:"+o.getDeptno()+" 部门姓名:"+o.getDname()+" 地点:"+o.getLoc());
		}
	}
}


 


 

 

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。