属性包--com.jdbc.po
- 1.Score(主要定义成绩表的属性)
- 2.Student(主要定义学生类的属性)
方法包--com.jdbc.dao
- 1.类ScoreDao (主要定义通过连接数据库获取成绩列表的方法)
- 2.类StudentDao (主要定义通过连接数据库获取学生信息列表的方法)
工具包--com.jdbc.util
- 1.DBUtils(主要放置类ScoreDao和类StudentDao里面共同的连接数据库的代码)
多表连接包--com.jdbc.service
- 1.StudentService(主要定义学生信息表和成绩表连接的方法)
/StudentService--该表作用是将StudentDao里面查询到的表和ScoreDao里面查询到的表,将两张表组合起来的作用
/学生的业务逻辑表
定义成绩类Score
package com.jdbc2.po;
public class Score {
private int id;
//定义成绩id
private int sid;
//定义课程名称
private String course;
//定义成绩
private double score;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public int getSid() {
return sid;
}
public void setSid(int sid) {
this.sid = sid;
}
public String getCourse() {
return course;
}
public void setCourse(String course) {
this.course = course;
}
public double getScore() {
return score;
}
public void setScore(double score) {
this.score = score;
}
//toString() 方法,避免打印输出为地址
@Override
public String toString() {
return "Score [id=" + id + ", sid=" + sid + ", 科目=" + course + ", 成绩=" + score + "]";
}
}
定义学生类Student
package com.jdbc2.po;
import java.util.Date;
import java.util.List;
public class Student {
private int id;
//定义姓名
private String name;
//定义年龄
private int age;
//定义性别
private int sex;
//定义出生日期
private Date birthday;
//重点:建立一个学生对应多个成绩的联系的集合属性
//成绩表集合定义到学生类中或者学生定义到成绩类中视需求而定
private List scoreList;
public List getScoreList() {
return scoreList;
}
public void setScoreList(List scoreList) {
this.scoreList = scoreList;
}
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 int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public int getSex() {
return sex;
}
public void setSex(int sex) {
this.sex = sex;
}
public Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
@Override
public String toString() {
return "学生列表 [id=" + id + ", 姓名=" + name + ", 年龄=" + age + ", 性别=" + sex + ", 出生日期=" + birthday
+ ", 成绩列表=" + scoreList + "]";
}
}
定义获取成绩表类ScoreDao
package com.jdbc2.dao;
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 com.jdbc2.po.Score;
import com.jdbc2.util.DBUtils;
public class ScoreDao {
// 根据学生编号查询成绩列表
public List getListBySid(int sid) {
// 数据库查询语句--当sid为?时查询出score表中所有信息
String sql = "select * from score where sid = ?";
// 建立连接数据库的对象,调用类DBUtils中的连接数据库的getConnection()方法
Connection conn = DBUtils.getConnection();
//定义一个成绩列表集合
List list = new ArrayList();
PreparedStatement pst = null;
ResultSet rs = null;
try {
pst = conn.prepareStatement(sql);
pst.setInt(1, sid);
rs = pst.executeQuery();
while (rs.next()) {
// 利用多态获取值
Score score = new Score();
score.setId(rs.getInt("id"));
score.setSid(rs.getInt("sid"));
score.setCourse(rs.getString("course"));
score.setScore(rs.getInt("score"));
list.add(score);
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally {
DBUtils.closeConnection(conn, pst, null);
}
return list;
}
}
定义获取学生信息表类StudentDao
package com.jdbc2.dao;
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 com.jdbc2.po.Student;
import com.jdbc2.util.DBUtils;
//date access object
public class StudentDao {
public List getALL() {
//数据库查询语句
String sql = "select * from student";
//建立连接
Connection conn = DBUtils.getConnection();
List list = new ArrayList();
PreparedStatement pst = null;
ResultSet rs = null;
try {
pst = conn.prepareStatement(sql);
rs = pst.executeQuery();
while (rs.next()) {
// 利用多态获取值
Student stu = new Student();
stu.setId(rs.getInt("id"));
stu.setName(rs.getString("name"));
stu.setSex(rs.getInt("sex"));
stu.setAge(rs.getInt("age"));
stu.setBirthday(rs.getDate("birthday"));
list.add(stu);
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally {
DBUtils.closeConnection(conn, pst, null);
}
return list;
}
}
定义工具类DBUtils
package com.jdbc2.util;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
//通过建立工具类DBUtils来对连接数据库和断开数据库所写的功能代码进行提取,因为增删改查的方法内都需要进行连接和断开数据库
//通过提取来进行代码优化
public class DBUtils {
// 取得连接
//用static修饰的时候访问没有限制
public static Connection getConnection() {
//相当于开启数据库mysql的钥匙
String url = "jdbc:mysql://localhost:3306/jdbc";
//用户名
String user = "root";
//密码
String password = "root";
Connection conn = null;
try {
// 引入数据库的连接驱动--重点:代码格式
Class.forName("com.mysql.jdbc.Driver");
// 连接数据库--需要(三个参数:连接地址 用户名 密码)
conn = DriverManager.getConnection(url, user, password);
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return conn;
}
//定义关闭资源closeConnection方法
public static void closeConnection(Connection conn, Statement pst,ResultSet rs) {
try {
//注意if语句
if (rs != null) {
rs.close();
}
if (pst != null) {
pst.close();
}
if (conn != null) {
conn.close();
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
定义多表连接查询类StudentService
package c.jdbc3.service;
import java.util.ArrayList;
import java.util.List;
import org.omg.Messaging.SyncScopeHelper;
import com.jdbc2.dao.ScoreDao;
import com.jdbc2.dao.StudentDao;
import com.jdbc2.po.Score;
import com.jdbc2.po.Student;
public class StudentService {
StudentDao stuDao = new StudentDao();
ScoreDao scoreDao = new ScoreDao();
// 查询学生以及成绩的列表
public List getAllStu() {
List stulist = new ArrayList();
// 只查询到学生的基础信息列表
stulist = stuDao.getALL();
// 给每个学生设置成绩列表
// for循环迭代将每个学生的成绩
// 重点
for (Student stu : stulist) {
// 根据学生的id--stu.getId()来获得这个学生的成绩列表scoreList并逐一的放进stulist集合内
List scoreList = scoreDao.getListBySid(stu.getId());
stu.setScoreList(scoreList);
}
//最后返回包含scoreList列表的stulist集合,即完成了两个表的连接
return stulist;
}
public static void main(String[] args) {
// 新建StudentService的对象
StudentService service = new StudentService();
// 用对象service来调用本类中的getAllStu方法来获取最后两张表连接后的集合stulist,然后定义一个新的集合list来接
List list = service.getAllStu();
//通过迭代器遍历list集合即可获得相应的集合内容
for (Student stu : list) {
System.out.println(stu);
}
System.out.println("------------------------------");
//只获取集合中的想要获取的信息
//循环迭代出scorelist表中的元素(包括成绩)
//重点
//此处迭代的list集合的内容即是上面的返回的stulist集合中的内容
//通过双重遍历集合来获取学生类和成绩类中的姓名和课程以及成绩
for (Student stu : list) {
//定义新的集合scorelist来接通过对象stu调用getScoreList()方法获得的成绩列表集合
//因为getScoreList()方法在Student类中,所以需要外面的for迭代器
List scorelist = stu.getScoreList();
for (Score score : scorelist) {
System.out.println("学生姓名:" + stu.getName() + " 课程:"
+ score.getCourse() + " 成绩:" + score.getScore() + "分" );
}
}
}
}
代码实现界面
查询界面
mysql数据成绩score列表界面
mysql数据学生student列表界面