标签:dao jdbc连接池 properties类 apache-common-dbcp
************************************************************************ ****原文: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()); } } }
【DAO】基于apache.commons.dbcp的DAO数据层的代码
标签:dao jdbc连接池 properties类 apache-common-dbcp
原文地址:http://blog.csdn.net/clark_xu/article/details/43699211