1 . new ArrayList<>(); //new ArrayList();
2. DriverManager.getConnection(url,user,password);
3. pstmt = conn.prepareStatement(sql); //参数为要执行的sql
4. rs = pstmt.executeQuery(
5. while(rs.next())
6. list.add(emp);
我们观察以下刚才的代码:
我们发现增加和删除操作有大量相同(相似)的代码;所以,我们想能不能将这些重复的代码提取出来 ;自己做一个数据库访问的通用类
参考实体类:
package com.etc.entity;
/**
* 自定义实体 类,和我们表结构一致
* @author Administrator
*
*/
public class Employee {
// 类中的属性和 表中的列 一致
private int empNo;
private String empName;
private int deptNo;
private double salary;
private int status;
public Employee() {
// TODO Auto-generated constructor stub
}
public Employee(int empNo, String empName, int deptNo, double salary, int status) {
super();
this.empNo = empNo;
this.empName = empName;
this.deptNo = deptNo;
this.salary = salary;
this.status = status;
}
@Override
public String toString() {
return "Employee [empNo=" + empNo + ", empName=" + empName + ", deptNo=" + deptNo + ", salary=" + salary
+ ", status=" + status + "]";
}
public Employee(String empName, int deptNo, double salary, int status) {
super();
this.empName = empName;
this.deptNo = deptNo;
this.salary = salary;
this.status = status;
}
public int getEmpNo() {
return empNo;
}
public void setEmpNo(int empNo) {
this.empNo = empNo;
}
public String getEmpName() {
return empName;
}
public void setEmpName(String empName) {
this.empName = empName;
}
public int getDeptNo() {
return deptNo;
}
public void setDeptNo(int deptNo) {
this.deptNo = deptNo;
}
public double getSalary() {
return salary;
}
public void setSalary(double salary) {
this.salary = salary;
}
public int getStatus() {
return status;
}
public void setStatus(int status) {
this.status = status;
}
}
DBUtil.java:
package com.etc.util;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
/**
* 数据库通用工具,返回连接,通用的增加,删除修改的操作; 查询待定; 释放资源;
*
* @author Administrator
*
*/
public class DBUtil {
private static final String URL = "jdbc:mysql://localhost:3306/companydb";
private static final String USER = "root";
private static final String PASSWORD = "root";
/**
* 返回连接对象
*
* @return java.sql.connection对象
* @throws SQLException
*/
public static Connection getConn() throws SQLException {
// 加载驱动(可以省略)
return DriverManager.getConnection(URL, USER, PASSWORD);
}
/**
* 通用的增加 删除 修改
*
* @param sql
* 要执行的sql语句
* @param params
* 参数列表
* @return true 操作成功 false 操作失败
* @throws SQLException
*/
public static boolean execUpdate(String sql, Object... params) {
Connection conn = null;
int n = 0;
PreparedStatement pstmt = null;
try {
conn = getConn();
// 通过connection对象得到PreparedStatement
pstmt = conn.prepareStatement(sql);
// 给?赋值
setPreparedStatement(pstmt, params);
// 要执行sql
n = pstmt.executeUpdate();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
//释放资源
closeAll(null, pstmt, conn);
}
return n > 0;
}
/**
* 补齐占位符的?的值
*
* @param pstmt
* PreparedStatement对象
* @param params
* 可变参数(数组)
*/
public static void setPreparedStatement(PreparedStatement pstmt, Object... params) {
if (null != params && null != pstmt) {
for (int i = 0; i < params.length; i++) {
try {
pstmt.setObject(i + 1, params[i]);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
/**
* 释放资源
*
* @param rs
* 结果集对象
* @param pstmt
* 预处理对象
* @param conn
* 连接对象
*/
public static void closeAll(ResultSet rs, PreparedStatement pstmt, Connection conn) {
if (null != rs) {
try {
rs.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if (null != pstmt) {
try {
pstmt.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if (null != conn) {
try {
conn.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
DAO 类
package com.etc.dao;
import com.etc.entity.Employee;
import com.etc.util.DBUtil;
/**
* 数据
*
* @author Administrator
*
*/
public class EmployeeDao_UseUtil {
/**
* 增加员工
*
* @param emp
* 一个员工对象
* @return true 增加成功 false 失败
*/
public boolean addEmp(Employee emp) {
if (null != emp) {
String sql = "insert into employee values(null,?,?,?,?)";
return DBUtil.execUpdate(sql, emp.getEmpName(), emp.getDeptNo(), emp.getSalary(), emp.getStatus());
}
return false;
}
// 修改 删除
/**
* 删除员工
*
* @param emp
* 员工对象
* @return true 删除成功 false 失败
*/
public boolean delEmp(Employee emp) {
if (null != emp) {
String sql = "delete from employee where empNo = ?";
return DBUtil.execUpdate(sql, emp.getEmpNo());
}
return false;
}
/**
* 删除员工
*
* @param empNo
* 员工编号
* @return true 删除成 false 删除失败
*/
public boolean delEmp(int empNo) {
if (empNo > 0) {
String sql = "delete from employee where empNo = ?";
return DBUtil.execUpdate(sql, empNo);
}
return false;
}
}
测试类
package com.etc.test;
import java.util.Scanner;
import com.etc.dao.EmployeeDao_UseUtil;
public class TestAddEmp_Util {
public static void main(String[] args) {
System.out.println("请输入要删除的员工编号");
Scanner input = new Scanner(System.in);
int empNo = input.nextInt();
EmployeeDao_UseUtil empdao = new EmployeeDao_UseUtil();
boolean flag = empdao.delEmp(empNo);
if (flag)
System.out.println("删除成功");
else
System.out.println("删除失败");
input.close();
}
}
刚刚实现的是员工的删除:
使用通用类实现员工的增加 删除 修改 操作; 要有菜单;
刚刚的通用类尽量理解,如果理解不了,就会用(拿来到工程中直接调用)
创建CachedRowSet
填充cachedRowSet
获取数据的方式:
参考的代码
1) 完成刚刚的查询所有Emp记录的操作;
2) 在1)基础上实现按照部门编号查询员工
3) 在1)基础上实现按照姓名进行模糊查询员工
4) 在1)基础上实现员工的分页显示
1) 数据库访问的通用类: 会用;
2) 查询操作中的缓存CachedRowSet对象
3) 综合应用: 工具类+Dao+Entity+Menu+DB(SQL)
使用jdbc完成对商品数据库中的商品表的增删改查操作;但是要求:
工具类+Dao+Entity+Menu+DB(SQL)