up:: JDBC实现事务
首先声明一点,本篇博客内容不是新内容,以前遇到过N次,只是这儿再重复说明一下。
对员工数据进行分页查询,分页获取的数据进行封装,包装成一个一个的员工实体对象(JavaBean),然后将这些对象放入一个集合中,方便java程序后续的读取和处理。
本篇博客就两点:(1)JavaBean;(2)LIMIT分页(仅适用于MySQL);
首先,先编写Employee实体类:
开始执行:
Employee类:
这个类的属性仅仅要求需要和数据库表的字段对应,没有要求一定名字一定相同。。。。。但是还是强烈建议相同啦!!!(因为这样可以避免很多后续的无头绪的问题)
package com.imooc.jdbc.command.entity;
public class Employee {
/**
* 一个JavaBean应该具备的条件
* 1.具备默认构造函数;
* 2.属性私有;
* 3.存在getter与setter方法;
*/
public Employee(){}
private Integer eno;
private String ename;
private Float salary;
private String dname;
public Integer getEno() {
return eno;
}
public void setEno(Integer eno) {
this.eno = eno;
}
public String getEname() {
return ename;
}
public void setEname(String ename) {
this.ename = ename;
}
public Float getSalary() {
return salary;
}
public void setSalary(Float salary) {
this.salary = salary;
}
public String getDname() {
return dname;
}
public void setDname(String dname) {
this.dname = dname;
}
}
然后,编写分页查询类: PaginationCommand类:
PaginationCommand类:
package com.imooc.jdbc.hrapp.command;
import com.imooc.jdbc.common.DbUtils;
import com.imooc.jdbc.hrapp.entity.Employee;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
/**
* 分页查询员工数据
*/
public class PaginationCommand implements Command{
@Override
public void execute() {
Scanner in = new Scanner(System.in);
System.out.println("请输入页号:");
int page = in.nextInt();
Connection conn = null;
PreparedStatement pstmt = null;
ResultSet rs = null;
try {
conn = DbUtils.getConnection();
String sql = "select * from employee limit ?,10";
pstmt = conn.prepareStatement(sql);
pstmt.setInt(1,(page-1)*10); // mysql在LIMIT关键字中:开始位置是0;
rs = pstmt.executeQuery();
List<Employee> list = new ArrayList<>();//
while (rs.next()) {
// 推荐使用字段名来获取字段值,而不要使用列的索引获取字段值;
Integer eno = rs.getInt("eno");
String ename = rs.getString("ename");
Float salary = rs.getFloat("salary");
String dname = rs.getString("dname");
Employee employee = new Employee();
employee.setEno(eno);
employee.setEname(ename);
employee.setSalary(salary);
employee.setDname(dname);
list.add(employee);//将结果集中的数据保存到集合中;即使这个结果集后来被close了,数据已经保存到list中了,数据也不会丢失。
}
System.out.println(list.size());
} catch (SQLException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}finally {
DbUtils.closeConnection(rs,pstmt,conn);
}
}
}
说明: (1)分页查询在MySQL中使用LIMIT关键字。 LIMIT关键字并不是标准SQL中有的,LIMIT关键字仅仅是MySQL独有的专用于分页的关键字,是MySQL的方言;Oracle和SQLserver也有对应的方言来实现数据的分页处理。
(2)MySQL的LIMIT关键字,起始位置是0;
(3)推荐使用列名的方式来获取字段值,(不推荐使用列的索引值来获取),因为数据表的表结构可能在以后发生变化;比如,以后在employee表原本第一个列前有增加了一列,那么此时这儿就会匹配混乱了;
最后,在HumanResourceApplication入口类中编写分页的部分:
然后,在入口类中添加上分页的部分: HumanResourceApplication类:
package com.imooc.jdbc.hrapp;
import com.imooc.jdbc.hrapp.command.*;
import java.util.Scanner;
public class HumanResourceApplication {
public static void main(String[] args) {
System.out.println("1-查询部门员工");
System.out.println("2-办理员工入职");
System.out.println("3-调整薪资");
System.out.println("4-员工离职");
System.out.println("5-员工分页查询");
System.out.println("请选择功能:");
Scanner in = new Scanner(System.in);
Integer cmd = in.nextInt();
Command command = null;// 将接口变量定义在外边,并初始化为null;在内部遇到不同操作的时候,再去实例化与之对应的类;
switch (cmd){
case 1: //查询部门员工
command = new PstmtQueryCommand();
command.execute();
break;
case 2: //办理员工入职
command = new InsertCommand();
command.execute();
break;
case 3: //调整薪资
command = new UpdateCommand();
command.execute();
break;
case 4: //员工离职
command = new DeleteCommand();
command.execute();
case 5:
command = new PaginationCommand();
command.execute();
default:
}
}
}
这篇博客的核心就是:知道LIMIT关键字在实际中的用法。其他内容都还好……