用java 里面的jdbc语法编写两个方法,实现对数据库的新增和查询。 一个方法是新增班级信息,学生信息,成绩信息。 另外一个方法是查询出学生的分数信息列表并打印出来,至少需包含学生的班级名称,学生姓名,分数。
时间: 2023-11-28 17:48:59 浏览: 152
使用jdbc,使用java和数据库连接,在java代码中实现访问数据库中数据的方法-------最简单入门级(cs.pdf
下面是使用 JDBC 实现新增和查询的示例代码:
```java
import java.sql.*;
public class StudentManager {
private static final String DB_URL = "jdbc:mysql://localhost:3306/mydb?useSSL=false&serverTimezone=UTC";
private static final String DB_USER = "root";
private static final String DB_PASSWORD = "password";
// 新增班级、学生和成绩信息
public static void addStudentInfo(String className, String studentName, int score) {
Connection conn = null;
PreparedStatement ps = null;
try {
// 连接数据库
conn = DriverManager.getConnection(DB_URL, DB_USER, DB_PASSWORD);
// 插入班级信息
ps = conn.prepareStatement("INSERT INTO class (name) VALUES (?)");
ps.setString(1, className);
ps.executeUpdate();
// 获取班级ID
int classId = 0;
ps = conn.prepareStatement("SELECT id FROM class WHERE name = ?");
ps.setString(1, className);
ResultSet rs = ps.executeQuery();
if (rs.next()) {
classId = rs.getInt("id");
}
// 插入学生信息
ps = conn.prepareStatement("INSERT INTO student (name, class_id) VALUES (?, ?)");
ps.setString(1, studentName);
ps.setInt(2, classId);
ps.executeUpdate();
// 获取学生ID
int studentId = 0;
ps = conn.prepareStatement("SELECT id FROM student WHERE name = ?");
ps.setString(1, studentName);
rs = ps.executeQuery();
if (rs.next()) {
studentId = rs.getInt("id");
}
// 插入成绩信息
ps = conn.prepareStatement("INSERT INTO score (student_id, score) VALUES (?, ?)");
ps.setInt(1, studentId);
ps.setInt(2, score);
ps.executeUpdate();
System.out.println("新增成功!");
} catch (SQLException e) {
e.printStackTrace();
} finally {
// 关闭数据库连接和预处理语句对象
try {
if (ps != null) {
ps.close();
}
if (conn != null) {
conn.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}
// 查询学生的分数信息列表并打印出来
public static void printScoreList() {
Connection conn = null;
PreparedStatement ps = null;
try {
// 连接数据库
conn = DriverManager.getConnection(DB_URL, DB_USER, DB_PASSWORD);
// 查询学生的分数信息
ps = conn.prepareStatement("SELECT class.name AS class_name, student.name AS student_name, score.score FROM class JOIN student ON class.id = student.class_id JOIN score ON student.id = score.student_id");
ResultSet rs = ps.executeQuery();
// 打印列表
System.out.println("班级\t\t学生\t\t分数");
while (rs.next()) {
String className = rs.getString("class_name");
String studentName = rs.getString("student_name");
int score = rs.getInt("score");
System.out.printf("%s\t\t%s\t\t%d\n", className, studentName, score);
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
// 关闭数据库连接和预处理语句对象
try {
if (ps != null) {
ps.close();
}
if (conn != null) {
conn.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}
public static void main(String[] args) {
addStudentInfo("ClassA", "Tom", 90);
addStudentInfo("ClassB", "John", 85);
printScoreList();
}
}
```
注意事项:
1. 需要先加载 MySQL 的 JDBC 驱动:`Class.forName("com.mysql.cj.jdbc.Driver");`
2. 要在 URL 中指定时区:`?useSSL=false&serverTimezone=UTC`
3. 在使用 PreparedStatement 时,可以使用占位符(?)来设置参数,可以有效地防止 SQL 注入攻击。
4. 在使用完数据库连接和预处理语句对象后,要记得关闭它们,以释放资源。可以使用 try-catch-finally 结构来实现。
阅读全文