班级成绩表使用jdbc+druid+dbutils输出排名,要求排名是动态的
时间: 2023-12-29 22:06:13 浏览: 84
实现方式:
1. 首先,需要连接数据库,这里使用Druid连接池。
```java
// 加载Druid连接池配置文件
Properties properties = new Properties();
properties.load(new FileInputStream("druid.properties"));
// 创建Druid连接池
DataSource dataSource = DruidDataSourceFactory.createDataSource(properties);
// 获取数据库连接
Connection conn = dataSource.getConnection();
```
2. 查询所有学生的成绩,并按照成绩降序排列。
```java
// 查询所有学生的成绩
String sql = "SELECT * FROM score ORDER BY score DESC";
List<Map<String, Object>> list = QueryRunner().query(conn, sql, new MapListHandler());
```
3. 遍历查询结果,计算每个学生的排名。
```java
int rank = 1; // 初始化排名
for (int i = 0; i < list.size(); i++) {
Map<String, Object> map = list.get(i);
int score = (int) map.get("score");
if (i > 0) {
Map<String, Object> prevMap = list.get(i - 1);
int prevScore = (int) prevMap.get("score");
if (score < prevScore) {
rank = i + 1;
}
}
map.put("rank", rank); // 将排名存入map中
}
```
4. 输出成绩表,包括每个学生的姓名、成绩和排名。
```java
for (Map<String, Object> map : list) {
String name = (String) map.get("name");
int score = (int) map.get("score");
int rank = (int) map.get("rank");
System.out.println(name + "\t" + score + "\t" + rank);
}
```
完整代码:
```java
import com.alibaba.druid.pool.DruidDataSourceFactory;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.MapListHandler;
import javax.sql.DataSource;
import java.io.FileInputStream;
import java.sql.Connection;
import java.util.List;
import java.util.Map;
import java.util.Properties;
public class ScoreTable {
public static void main(String[] args) throws Exception {
// 加载Druid连接池配置文件
Properties properties = new Properties();
properties.load(new FileInputStream("druid.properties"));
// 创建Druid连接池
DataSource dataSource = DruidDataSourceFactory.createDataSource(properties);
// 获取数据库连接
Connection conn = dataSource.getConnection();
// 查询所有学生的成绩
String sql = "SELECT * FROM score ORDER BY score DESC";
List<Map<String, Object>> list = new QueryRunner().query(conn, sql, new MapListHandler());
// 计算每个学生的排名
int rank = 1; // 初始化排名
for (int i = 0; i < list.size(); i++) {
Map<String, Object> map = list.get(i);
int score = (int) map.get("score");
if (i > 0) {
Map<String, Object> prevMap = list.get(i - 1);
int prevScore = (int) prevMap.get("score");
if (score < prevScore) {
rank = i + 1;
}
}
map.put("rank", rank); // 将排名存入map中
}
// 输出成绩表
System.out.println("姓名\t成绩\t排名");
for (Map<String, Object> map : list) {
String name = (String) map.get("name");
int score = (int) map.get("score");
int rank = (int) map.get("rank");
System.out.println(name + "\t" + score + "\t" + rank);
}
// 关闭数据库连接
conn.close();
}
}
```
阅读全文