封装jdbc的crud操作
2017-09-25 20:13
330 查看
//封装crud操作 public class BaseDao { private final static String driver = "oracle.jdbc.driver.OracleDriver"; private final static String url = "jdbc:oracle:thin:localhost:1521:orcl"; private final static String name = "scott"; private final static String pwd = "123456"; public Connection getConn() { Connection conn = null; try { Class.forName(driver); conn = DriverManager.getConnection(url, name, pwd); if (conn == null) { System.out.println("**********8conn is null"); } } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); System.out.println("出错了,数据库没有连上"); } return conn; } // 增加,修改,删除 public int executeUpdate(String sql, Object[] objParam) throws Exception { int r = 0; Connection conn = this.getConn(); PreparedStatement ps = conn.prepareStatement(sql); if (objParam != null)// 判断参数是否为空 {// 对参数进行遍历,并设置sql语句参数值 for (int i = 0; i < objParam.length; i++) { ps.setObject((i + 1), objParam[i]); } } r = ps.executeUpdate(); ps.close(); conn.close(); return r; } // 封装jdbc查询方法,返回结果集 public ResultSet executeQuery(String sql, Object[] objParam) throws Exception { Connection conn = this.getConn(); PreparedStatement ps = conn.prepareStatement(sql); ResultSet rs = null; if (objParam != null) { for (int i = 0; i < objParam.length; i++) { ps.setObject((i + 1), objParam[i]); } } rs = ps.executeQuery(); return rs; } // 封装jdbc查询方法,返回结果集,利用反射获取记录封装对象添加集合 public List<Object> executeQuery2(String sql, Object[] objParam, String className) throws Exception { List<Object> list = new ArrayList<Object>();// 创建一个list集合 Connection conn = this.getConn(); PreparedStatement ps = conn.prepareStatement(sql); ResultSet rs = null; if (objParam != null) {// 参数数组不为空,则遍历 for (int i = 0; i < objParam.length; i++) { ps.setObject((i + 1), objParam[i]); } } rs = ps.executeQuery();// 执行查询返回结果 Class<?> cl = Class.forName(className); Field[] fie = cl.getDeclaredFields();// 得到javabean的属性 while (rs.next()) {// 对rs结果集进行判断 Object obj = cl.newInstance();// 创建一个对象 for (Field f : fie) {// 对属性数组进行遍历 String name = f.getName();// 获得属性名字 Object val = rs.getObject(name);// 根据名字得到表里的记录 f.setAccessible(true);// 设置可访问 f.set(obj, val);// 字段设置值 } list.add(obj);// 遍历完一条记录添加一个集合 } return list; } }
测试:
public class EmpDao extends BaseDao {
public static void main(String[] args) throws SQLException {
EmpDao ed = new EmpDao();
List<Emp> list = ed.getEmpList3();
for (Emp e : list) {
System.out.println(e.getEmpno() + "\t" + e.getEname() + "\t"
+ e.getJob() + "\t" + e.getDept().getDno() + "\t"
+ e.getDept().getDname() + "\t" + e.getDept().getLoc());
}
}
private List<Emp> getEmpList3() throws SQLException {
// TODO Auto-generated method stub
List<Emp> list = new ArrayList<Emp>();// 创建list集合
Connection conn = super.getConn();
// 创建一个表关联查询语句
String sql = "select empno,ename,job,b.deptno,b.dname from emp a,dept b where a.deptno=b.deptno";
PreparedStatement ps = conn.prepareStatement(sql);
ResultSet rs = ps.executeQuery();// 执行查询
while (rs.next()) {
Emp emp = new Emp();// 创建对象
// 设置属性为对结果接进行遍历从列名得到的对象
emp.setEmpno(rs.getString("empno"));
emp.setEname(rs.getString("ename"));
emp.setJob(rs.getString("job"));
// 关联查询得到两张表的记录
Dept d = new Dept();
d.setDno(rs.getString("deptno"));
d.setDname(rs.getString("dname"));
emp.setDept(d);// 在emp对象里添加dept对象
list.add(emp);// 添加emp对象
}
return list;
}
// 添加记录
public void addDept() throws Exception {
String sql = "inset inot dept(deprno,dname,loc) values(?,?,?)";
Object[] val = { "79", "开发部", "洛阳" };
int r = super.executeUpdate(sql, val);
if (r == 1) {
System.out.println("添加记录成功");
}
}
// 删除记录
public void deleteDept() throws Exception {
String sql = "delete from dept where deptno=?";
Object obj[] = { "79" };
int r = super.executeUpdate(sql, obj);
if (r == 1) {
System.out.println("添加记录成功");
}
}
// 更新记录
public void updateDept() throws Exception {
String sql = "update dept set dname=? where deptno=?";
int r = super.executeUpdate(sql, null);
if (r == 1) {
System.out.println("添加记录成功");
}
}
public List<Emp> getEmpList2() throws Exception {
List<Emp> list = new ArrayList<Emp>();
String sql = "select empno,ename,job,b.deptno,b.name from emp a,dept b where a.deptno=b.deptno";
ResultSet rs = super.executeQuery(sql, null);
while (rs.next()) {
Emp emp = new Emp();
emp.setEmpno(rs.getString("empno"));
emp.setEname(rs.getString("name"));
emp.setJob(rs.getString("job"));
Dept d = new Dept();
d.setDno(rs.getString("deptno"));
d.setDname(rs.getString("dname"));
emp.setDept(d);
list.add(emp);
}
rs.close();
return list;
}
// 利用反射执行查询,封装rs结果,添加进集合
public List<Emp> getEmpList() throws Exception {
List list = new ArrayList();
String sql = "select empno,ename,job from emp";
list = super.executeQuery2(sql, null, "transaction.entity.Emp");
for (Object o : list) {
Emp e = (Emp) o;
System.out.println(e.getEmpno() + " " + e.getEname());
}
return list;
}
}
相关文章推荐
- 用JDBC封装CRUD操作(个人总结)
- 对jdbc操作工具类JdbcUtil的简单封装与应用
- JDBC操作数据库――CRUD综合应用实例
- JDBC连数据库及对数据库的CRUD操作
- JDBC操作数据库 封装好的工具类
- JDBC操作数据库基本封装
- JDBC CRUD操作(五)
- JDBC简单的CRUD操作
- 使用c3p0技术实现对数据库crud操作的自定义封装
- 对JDBC操作数据库的简单封装
- Hibernate和JDBC实现CRUD操作的比较
- JDBC多表的CRUD操作
- spring jdbc查询 依赖JdbcTemplate这个类模版封装JDBC的操作
- 适用,简单的数据库连接与sql操作的封装(JDBC,数据库连接池,c3p0)
- Spring4.x+hibernate5.x的整合之基础操作的封装(CRUD包含分页)(待补充)
- Java封装JDBC数据库增、删、改、查操作成JAR文件,以供Web工程调用,适用于多种数据库
- 封装JDBC事务操作,执行存储过程测试
- JDBC(2) 使用JDBC实现CRUD操作
- Phoenix(四)JDBC CRUD操作
- javaweb基础(33)_jdbc的crud操作