联合查询
demp表格+dept表格
等值连接
外连接
内连接
Emp deptno(聚合关系)emp ——> dept 一对多关系
public class DaoEmp {
//数据持久层
private String className = "com.mysql.jdbc.Driver" ; //"com.mysql.jdbc.Driver"
private String url = "jdbc:mysql://localhost:3306/test?characterEncoding=utf-8&verifyServerCertificate=false&useSSL=true" ;
private String user = "root" ;
private String password = "root" ;
public ArrayList<Emp> limit(int rowIndex){
Connection con = null ;
PreparedStatement pstat = null ;
ResultSet rs = null ;
ArrayList<Emp> list = new ArrayList<Emp>();
try {
Class.forName(className);
con = DriverManager.getConnection(url,user,password);
String sql = "SELECT * FROM EMP,DEPT WHERE EMP.DEPTNO=DEPT.DEPTNO LIMIT ?,5";
pstat = con.prepareStatement(sql);
pstat.setInt(1,rowIndex);
rs = pstat.executeQuery();
while(rs.next()){
Emp emp = new Emp();
emp.setEmpno(rs.getInt("empon"));
emp.setEname(rs.getString("ename"));
emp.setJob(rs.getString("job"));
emp.setMgr(rs.getInt("mgr"));
emp.setHireDate(rs.getDate("hiredate"));
emp.setSal(rs.getInt("sal"));
emp.setComm(rs.getInt("comm"));
Dept dept = new Dept();
dept.setDeptno(rs.getInt("deptno"));
dept.setDname(rs.getString("dname"));
dept.setLoc(rs.getString("loc"));
emp.setDeptno(dept);
list.add(emp);
}
} catch (Exception e) {
e.printStackTrace();
}finally{
try {
if (rs!=null){
rs.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
try {
if (pstat!=null){
pstat.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
try {
if (con!=null){
con.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
return list ;
}
//=======================================================================
public class ServiceEmp {
private DaoEmp dao = new DaoEmp() ;
//数据处理层
public ArrayList<Emp> limit(int page){
return dao.limit((page-1)*5);//每次查询的行数是5
}
}
//===========================
public class Main {
public static void main(String[] args){
ServiceEmp service = new ServiceEmp() ;
Scanner input = new Scanner(System.in);
System.out.println("输入页码");
int page = input.nextInt() ;
ArrayList<Emp> list = service.limit(page);
for (Emp emp : list){
System.out.println(emp);
}
}
}
//============================================================
public class Emp {
private Integer empno ;
private String ename ;
private String job ;
private Integer mgr ;
private Date hireDate ;
private Integer sal ;
private Integer comm ;
private Dept deptno ;//把Dept当做属性
public Emp(){};
public Emp(Integer empno, String ename, String job, Integer mgr, Date hireDate, Integer sal, Integer comm, Dept deptno) {
this.empno = empno;
this.ename = ename;
this.job = job;
this.mgr = mgr;
this.hireDate = hireDate;
this.sal = sal;
this.comm = comm;
this.deptno = deptno;
}
@Override
public String toString() {
StringBuilder builder = new StringBuilder("{");
builder.append(this.empno);
builder.append(",");
builder.append(this.ename);
builder.append(",");
builder.append(this.job);
builder.append(",");
builder.append(this.mgr);
builder.append(",");
builder.append(this.hireDate);
builder.append(",");
builder.append(this.sal);
builder.append(",");
builder.append(this.comm);
builder.append(",");
builder.append(this.deptno);
builder.append("}");
return builder.toString();
}
public Integer getEmpno() {
return empno;
}
public void setEmpno(Integer empno) {
this.empno = empno;
}
public String getEname() {
return ename;
}
public void setEname(String ename) {
this.ename = ename;
}
public String getJob() {
return job;
}
public void setJob(String job) {
this.job = job;
}
public Integer getMgr() {
return mgr;
}
public void setMgr(Integer mgr) {
this.mgr = mgr;
}
public Date getHireDate() {
return hireDate;
}
public void setHireDate(Date hireDate) {
this.hireDate = hireDate;
}
public Integer getSal() {
return sal;
}
public void setSal(Integer sal) {
this.sal = sal;
}
public Integer getComm() {
return comm;
}
public void setComm(Integer comm) {
this.comm = comm;
}
public Dept getDeptno() {
return deptno;
}
public void setDeptno(Dept deptno) {
this.deptno = deptno;
}
}
//------------------------------------------
public class Dept {
private Integer deptno ;
private String dname ;
private String loc ;
public Dept(){}
public Dept(Integer deptno, String dname, String loc) {
this.deptno = deptno;
this.dname = dname;
this.loc = loc;
}
public String toString(){
StringBuilder builder = new StringBuilder();
builder.append(this.deptno);
builder.append(",");
builder.append(this.dname);
builder.append(",");
builder.append(this.loc);
return builder.toString() ;
}
public Integer getDeptno() {
return deptno;
}
public void setDeptno(Integer 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;
}
}
如果查询的表表格中原有的列 是通过后续计算出来的
用ArrayList
一个Map集合来存储信息–相当于是一个对象
public ArrayList<HashMap<String,Object>> count(){
Connection con = null ;
PreparedStatement pstat = null ;
ResultSet rs = null ;
ArrayList<HashMap<String,Object>> list = new ArrayList<>();
try {
Class.forName(className);
con = DriverManager.getConnection(url,user,password);
String sql = "SELECT DEPTNO,COUNT(EMPON) AS CO FROM EMP GROUP BY DEPTNO";
pstat = con.prepareStatement(sql);
rs = pstat.executeQuery();
while(rs.next()){
HashMap<String,Object> map = new HashMap<String,Object>();
map.put("deptno",rs.getInt("deptno"));
map.put("co",rs.getInt("co"));
list.add(map);
}
} catch (Exception e) {
e.printStackTrace();
}finally{
try {
if (rs!=null){
rs.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
try {
if (pstat!=null){
pstat.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
try {
if (con!=null){
con.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
return list ;
}
//--------------------------------------
public ArrayList<HashMap<String,Object>> count(){
return dao.count();
}
//---------------------------
public static void main(String[] args){
ServiceEmp service = new ServiceEmp() ;
ArrayList<HashMap<String,Object>>list = service.count();
for (HashMap<String,Object> map : list){
System.out.println(map.get("deptno")+" "+map.get("co"));
}
}