一、案例要求
1)展示数据库中多个学生信息
2)随机点出某个学生,并在该学生的对应次数中+1
3)判断是否继续点名
4)返回最终的统计结果
二、操作步骤
1. 建立一个名为 t_student 的数据表,结构如下图:
t_student数据表结构2. 往 t_student 数据表中输入一些测试数据,如下图
t_student数据表3. 创建 Student 实体类,用于存放学生信息,****属性对应于t_student表中的字段
package com.lcyex.demo1;
public class Student {
private int id;
private String name;
private int count;
public Student() {
super();
// TODO Auto-generated constructor stub
}
public Student(int id, String name, int count) {
super();
this.id = id;
this.name = name;
this.count = count;
}
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 getCount() {
return count;
}
public void setCount(int count) {
this.count = count;
}
@Override
public String toString() {
return name+"\t\t\t"+count;
}
}
4. 创建 RandomRollCall 测试类
1)创建getDataList()方法,用于从t_student数据表中获取学生信息,并返回List集合对象
2)创建ArrayList集合用于接收getDataList()方法返回的集合对象
3)使用foreah遍历ArrayList集合
4)实例化Random对象,使用nextInt()方法返回随机下标
5)通过List集合的get()方法获取对象,在使用getName()方法获取对象属性,输出本次中标学员姓名
6)创建updateDataList(String name)方法,用于更新学员的中标次数,形参String name为本次中标学员姓名
7)判断是否继续点名
8)结束点名,通过getDataList()方法,输出所有信息
//RandomRollCall测试类
package com.lcyex.demo1;
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.Random;
import java.util.Scanner;
import b_study_utils.CloseUtils;
import b_study_utils.DBUtils;
public class RandomRollCall {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
//循环点名
do {
//显示所有学生信息
System.out.println("当前所有学生的信息:");
List<Student> list = getDataList();
for(Student student : list) {
System.out.print(student.getName()+"\t");
}
//随机点名
Random random = new Random();
int index = random.nextInt(list.size());
String name = list.get(index).getName();
System.out.println("\n本次抽取的学员:"+name);
//累加点中次数
updateDataList(name);
//是否继续
System.out.println("是否继续抽取(y/n)");
String flag = scanner.next();
if(!"y".equals(flag)) {
break;
}
}while(true);
//输出学生姓名及点中次数
List<Student> list = getDataList();
System.out.println("姓名\t\t\t次数");
for(Student student : list) {
System.out.println(student);
}
}
//获取学生信息
public static List<Student> getDataList() {
Connection conn = null;
PreparedStatement prst = null;
ResultSet rs = null;
List<Student> list = new ArrayList<>();
try {
//使用DBUtils工具类建立数据库连接
conn = DBUtils.getConnection();
String sql = "select * from t_Student";
prst = conn.prepareStatement(sql);
rs = prst.executeQuery();
while(rs.next()) {
int id = rs.getInt("id");
String name = rs.getString("name");
int count = rs.getInt("count");
list.add(new Student(id, name, count));
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
//使用CloseUtils工具类统一关闭数据库资源
CloseUtils.closeAll(rs,prst,conn);
}
return list;
}
//累加点中次数
public static void updateDataList(String name) {
Connection conn = null;
PreparedStatement prst = null;
try {
//使用DBUtils工具类建立数据库连接
conn = DBUtils.getConnection();
String sql = "update t_Student set count=count+1 where name=?";
prst = conn.prepareStatement(sql);
prst.setString(1, name);
prst.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
} finally {
//使用CloseUtils工具类统一关闭数据库资源
CloseUtils.closeAll(prst,conn);
}
}
}
5. 创建CloseUtils工具类和DBUtils工具类,为JDBC提供服务
1)CloseUtils工具类:用于统一关闭数据库资源
2)DBUtils工具类:用于建立数据库连接
//CloseUtils工具类:用于统一关闭数据库资源
package com.lcyex.utils;
public class CloseUtils {
//可变参数:本质上数组
public static void closeAll(AutoCloseable... cs) {
for(AutoCloseable c : cs) {
if(c != null) {
try {
c.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
}
//DBUtils工具类:用于创建数据库连接
package com.lcyex.utils;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
public class DBUtils {
//将加载驱动放入静态代码块中,只需要加载一次
static {
try {
Class.forName("com.mysql.jdbc.Driver");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
//获取连接对象
public static Connection getConnection() {
Connection connection = null;
try {
connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/test", "root", "123");
} catch (SQLException e) {
e.printStackTrace();
}
return connection;
}
}
网友评论