实体类
package com.xtu.entity;
import java.util.Date;
public class Student {
private int id;
private String name;
private Date birthday;
public Student() {
super();
}
public Student(String name, Date birthday) {
this.name = name;
this.birthday = birthday;
}
public Student(int id, String name, Date birthday) {
this.id = id;
this.name = name;
this.birthday = birthday;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result
+ ((birthday == null) ? 0 : birthday.hashCode());
result = prime * result + id;
result = prime * result + ((name == null) ? 0 : name.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Student other = (Student) obj;
if (birthday == null) {
if (other.birthday != null)
return false;
} else if (!birthday.equals(other.birthday))
return false;
if (id != other.id)
return false;
if (name == null) {
if (other.name != null)
return false;
} else if (!name.equals(other.name))
return false;
return true;
}
@Override
public String toString() {
return "Student [id=" + id + ", name=" + name + ", birthday="
+ birthday + "]";
}
}
常量类
package com.xtu.manager;
public class ConstantManager {
public final static String DRIVERCLASS = "oracle.jdbc.driver.OracleDriver";
public final static String URL = "jdbc:oracle:thin:@172.17.141.131:1521:myoracle";
public final static String USER = "scott";
public final static String PASSWORD = "tiger";
}
数据库管理类
package com.xtu.manager;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;
import com.xtu.mapping.interfaces.ResultSetMapping;
public class DatabaseManager {
Connection connection = null;
Statement statement = null;
PreparedStatement pres = null;
ResultSet rs = null;
/**
* 连接数据库
*/
public void connectionOracle() {
try {
Class.forName(ConstantManager.DRIVERCLASS);
connection = DriverManager.getConnection(ConstantManager.URL,ConstantManager.USER,ConstantManager.PASSWORD);
statement = connection.createStatement();
} catch (ClassNotFoundException e) {
System.out.println("加载驱动类失败!!");
e.printStackTrace();
} catch (SQLException e) {
System.out.println("数据库连接失败!!");
e.printStackTrace();
}
}
/**
* 执行查询,直接返回包装对象构成的集合
*/
@SuppressWarnings({ "unchecked", "rawtypes" })
public List query(String sql,ResultSetMapping mapping,Object[] args) {
System.out.println(sql);
List list = new ArrayList();
this.connectionOracle();
try {
pres = connection.prepareStatement(sql);
for(int i=0;i<args.length;i++) {
pres.setObject(i + 1,args[i]);
}
// pres.execute();
// rs = pres.getResultSet();
//这一行代码与上面两行等价
rs = pres.executeQuery();
while(rs.next()) {
list.add(mapping.mapping(rs));
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
closeSource();
}
return list;
}
/**
* update实现
*/
public int update(String sql,Object[] args) {
System.out.println(sql);
//连接数据库
connectionOracle();
try {
pres = connection.prepareStatement(sql);
for(int i=0;i<args.length;i++) {
pres.setObject(i + 1,args[i]);
}
//用这个方法,返回影响的行数
int result = pres.executeUpdate();
// pres = connection.prepareStatement("commit");
// pres.execute();
return result;
} catch (SQLException e) {
e.printStackTrace();
} finally {
closeSource();
}
return 0;
}
/**
* 关闭打开的资源
*/
public void closeSource() {
try {
if(rs != null) {
rs.close();
rs = null;
}
if(statement != null) {
statement.close();
statement = null;
}
if(connection != null) {
connection.close();
connection = null;
}
} catch(SQLException e) {
}
}
}
实体类对应的DAO类
package com.xtu.dao;
import java.sql.ResultSet;
import java.util.List;
import com.xtu.entity.Student;
import com.xtu.manager.DatabaseManager;
import com.xtu.mapping.implement.StudentMapping;
public class StudentDAO {
private String sql = "";
private DatabaseManager dbm = new DatabaseManager();
ResultSet rs = null;
StudentMapping studentMapping = new StudentMapping();
/**
*查出表中所以的学生信息
*/
@SuppressWarnings("unchecked")
public List<Student> selectAll() {
sql = "select id,name,birthday from student";
List<Student> list = dbm.query(sql,studentMapping,new Object[]{});
return list;
}
/**
* 从表中找出指定id的学生信息
*/
@SuppressWarnings("unchecked")
public Student seleteByID(int id) {
sql = "select id,name,birthday from student where id = ?";
List<Student> list = dbm.query(sql,studentMapping,new Object[]{id});
//注意下面主要是考虑到程序的健壮性,不能用list != null 判断 因为list总是不是空 只是有可能没有任何元素
if(list.size() != 0) {
return list.get(0);
} else {
return null;
}
}
/**
* 根据给的学生信息,将其学生信息插入表中
*/
public boolean insert(Student student) {
sql = "insert into student(id,name,birthday) values(?,?,?)";
//Oracle只认识java.sql.Date这个日期,所以要进行一个转换!
Object[] args = {student.getId(),student.getName(),new java.sql.Date(student.getBirthday().getTime())};
// System.out.println(dbm.update(sql,args));
return dbm.update(sql,args) == 1;
}
/**
* 根据给的id,删除表中学生信息
*/
public boolean deleteByID(int id) {
sql = "delete from student where id = ?";
Object[] args = {id};
//System.out.println(dbm.update(sql,args));
return dbm.update(sql,args) == 1;
}
/**
* 删除表中所以的学生信息
*/
public boolean deleteAll() {
//注意这里要重修生成一个变量。
//因为如果还是sql = "delete from student"的话 那么在selectAll()时就把sql的内容改变了
String deleteAllSQL = "delete from student";
if(this.selectAll().size() == 0) {
System.out.println("表中没有任何记录!!");
return false;
} else {
System.out.println("删除的记录条数是:" + dbm.update(deleteAllSQL,new Object[]{}));
}
//再次查询整张表,如果记录条数为零了 说明删除成功了
return this.selectAll().size() == 0;
}
}
用于包装实体类的接口
package com.xtu.mapping.interfaces;
import java.sql.ResultSet;
import java.sql.SQLException;
public interface ResultSetMapping {
public Object mapping(ResultSet rs) throws SQLException;
}
用于实现包装student对象的类
package com.xtu.mapping.implement;
import java.sql.ResultSet;
import java.sql.SQLException;
import com.xtu.entity.Student;
import com.xtu.mapping.interfaces.ResultSetMapping;
public class StudentMapping implements ResultSetMapping{
@Override
public Student mapping(ResultSet rs) throws SQLException {
int i = 1;
Student student = new Student(rs.getInt(i++),rs.getString(i++),rs.getDate(i++));
return student;
}
}
测试类
import java.util.Date;
import java.util.List;
import com.xtu.dao.StudentDAO;
import com.xtu.entity.Student;
public class TestStudentDAO {
private StudentDAO studentDAO = new StudentDAO();
public static void main(String[] args) {
TestStudentDAO test = new TestStudentDAO();
test.testSelectAll();
System.out.println("==========================");
test.testDeleteByID();
test.testInsert();
test.testDeleteByID();
test.testInsert();
test.testSelectAll();
test.testSelectByID();
System.out.println("==========================");
test.testDeleteAll();
}
/**
* 测试插入
*/
public void testInsert() {
Student student = new Student(6,"科比",new Date());
System.out.println(studentDAO.insert(student));
}
/**
* 测试通过指定id,删除表中记录
*/
public void testDeleteByID() {
System.out.println(studentDAO.deleteByID(6));
}
/**
* 测试删除表中所有的元素
*/
public void testDeleteAll() {
System.out.println(studentDAO.deleteAll());
}
/**
* 测试通过指定的id,查询记录
*/
public void testSelectByID() {
Student student = studentDAO.seleteByID(2);
System.out.println(student);
}
/**
* 测试查询表中所有的元素
*/
public void testSelectAll() {
List<Student> list = studentDAO.selectAll();
for(Object o : list) {
System.out.println(o);
}
}
}