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());
}
}
}