JDBC 编程

Java 连接 MySQL 数据库实现管理系统。

学了 Java 学了 MySQL,合起来练练手,做一个 JDBC 编程(Java DataBase Connectivity)。

简单来说就是 Java 语言配上驱动包后,连接上本地的 MySQL 数据库,然后通过设定好的 SQL 命令结合传入参数对数据库进行各种增删改查操作。

配置环境

  1. 配置好IntelliJ IDEA与MySQL环境后,在官网下载驱动 jar 包。
    (mysql-connector-java.jar)
  2. 在 IDEA 中导入驱动 jar 包。
    在 src 下创建 lib 文件夹,导入下载好的 jar 包。将 lib 进行 Add as Library 操作。

流程设计

Java 代码实现

完整代码 400 行,这里就不全部放出来了。展示一下核心部分以及部分代码实现吧。

  • 在 Java 中,try-catch 语句用于处理异常。异常是程序运行时出现的错误或异常情况,使用 try-catch 语句可以捕获并处理这些异常,从而防止程序因未处理的异常而崩溃。
1
2
3
4
5
try {
// 可能引发异常的代码
} catch (ExceptionType e) {
// 处理异常的代码
}

主函数:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
public static void main(String[] args) throws SQLException {
Conn c = new Conn();
scanner = new Scanner(System.in);
statement = c.getConnection().createStatement();

c.print_interfaces();
while (true){
int op = scanner.nextInt();
switch(op){
case 0:
c.print_interfaces();
break;
case 1:
c.print_Student();
break;
case 2:
c.new_Student();
break;
case 3:
c.update_Student_info();
break;
case 4:
c.print_Course();
break;
case 5:
c.new_Course();
break;
case 6:
c.update_Course_info();
break;
case 7:
c.delete_null_course();
break;
case 8:
c.input_grade();
break;
case 9:
c.update_grade();
break;
case 10:
c.get_grade_by_Sdept();
break;
case 11:
c.order_by_Sdept();
break;
case 12:
c.search_info();
break;
case -1:
statement.close();
return;
default:
System.out.print("请重新输入操作序号:");
break;
}
}
}

MySQL 连接函数:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public Connection getConnection() { // 建立返回值为Connection的方法
try { // 加载数据库驱动类
Class.forName("com.mysql.cj.jdbc.Driver");
System.out.println("数据库驱动加载成功");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
try { // 通过访问数据库的URL获取数据库连接对象
con = DriverManager.getConnection("jdbc:mysql://localhost:3306/java_to_mysql?useUnicode=true&characterEncoding=gbk", user, password);
System.out.println("数据库连接成功");
} catch (SQLException e) {
e.printStackTrace();
}
return con;
}

更新学生成绩函数:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public void update_grade() throws SQLException {
System.out.print("请输入学号:");
String Sno = scanner.next();
System.out.print("请输入课程号:");
String Cno = scanner.next();
System.out.print("请输入修改后的成绩:");
int Grade = scanner.nextInt();
String sql = "UPDATE SC SET Grade = ? WHERE Sno = ? AND Cno = ?;";
PreparedStatement preparedStatement = con.prepareStatement(sql);
preparedStatement.setInt(1, Grade);
preparedStatement.setString(2, Sno);
preparedStatement.setString(3, Cno);
preparedStatement.executeUpdate();
System.out.println("学生成绩修改成功。");
}

按系对学生成绩进行排名:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
public void order_by_Sdept() throws SQLException {
String sql1 = "SELECT DISTINCT Sdept FROM Student, SC WHERE Student.Sno = SC.Sno;";
String sql2 = "SELECT Student.Sno, Sname, SC.Cno, Cname, Grade FROM Student, SC, Course " +
"WHERE Student.Sno = SC.Sno AND Sdept = ? AND SC.Cno = Course.Cno " +
"ORDER BY Grade DESC";
ResultSet Sdepts = statement.executeQuery(sql1);
while(Sdepts.next()){
PreparedStatement preparedStatement = con.prepareStatement(sql2);
preparedStatement.setString(1, Sdepts.getString("Sdept"));
ResultSet resultSet = preparedStatement.executeQuery();
System.out.println(Sdepts.getString("Sdept") + " 成绩表");
System.out.println("学号 姓名 课程号 课程名称 成绩");
while(resultSet.next()){
System.out.printf("%-10s %-8s %-5s %-8s %-8d\n",
resultSet.getString("Student.Sno"),
resultSet.getString("Sname"),
resultSet.getString("Cno"),
resultSet.getString("Cname"),
resultSet.getInt("Grade"));
}
System.out.println();
}
}