实验12 数据库系统设计
12.1 实验目的
- 掌握MVC设计方法。
- 利用JDBC连接数据库,并对数据库进行操作。
12.2 实验内容
12.2.1 设计一个数据库Student,包含成绩表Score,其中属性包含学号,姓名,专业,班级,平均成绩。字段名和类型自行定义,但需合理。
12.2.1.1 创建数据库student
DROP DATABASE IF EXISTS student; CREATE DATABASE student;
12.2.1.2 创建score表
USE student; CREATE TABLE score( stu_id INT PRIMARY KEY NOT NULL COMMENT '学号', `name` VARCHAR(16) NOT NULL COMMENT '姓名', major VARCHAR(16) NOT NULL COMMENT '专业', class_num TINYINT NOT NULL COMMENT '班级', avg_score DECIMAL(5,2) COMMENT '平均成绩' )COMMENT = '成绩表';
12.2.1.3 增加avg_score索引
-- 默认升序索引,但对单列降序同样生效 ALTER TABLE score ADD INDEX idx_score(avg_score);
12.2.1.4 增加记录数据
INSERT INTO score(stu_id,`name`,major,class_num,avg_score) VALUES (20217880,'小草','金融理财类',1,94), (20217865,'夜莺','播音主持类',3,93), (20217881,'雨浪','新闻传媒类',2,95), (20217883,'谢添','计算机类',6,96), (20217853,'狐狸半面添','计算机科学类',2,94), (20217864,'忧愁剑客','剑术刀影类',1,95), (20217882,'小思树','医药科学类',3,95.5), (20217888,'小宋','生命科学类',7,94.2), (20217889,'思熠','材料化学类',5,93.5), (20217893,'浪语','哲学与马克思类',2,94.6), (20217892,'艾浪','法学教育类',8,96.5), (20217884,'浪音','科学生命类',4,97), (20217886,'思浪','思想道德类',5,96.6), (20217854,'逐浪者','海洋生命类',1,96.4); -- 查看增加情况 SELECT * FROM score;
12.2.2 设计一个学生成绩管理界面
12.2.2.0 说明
1.实验要求
- 利用Jtable组件和其对应的Model,将数据库Student中的数据读出并按照平均成绩降序排序。最终效果图:
- 执行相应操作前应进行有效性检查,即数据库中是否有与学号相一致的主键,如果有则不能添加,并提示系统中已有该生数据,删除时则提示是否删除,点击确定删除。修改也做类似操作,在添加时必须保证所有选项不为空,删除的判断是仅需判断学号是否为空即可。
2.从0到1搭建学生成绩管理系统java整体结构
3.最终实现功能
- 本项目需要进行数据库连接,下载,安装与使用MySQL并下载图形化界面软件查看文章:MySQL下载与安装、mysql服务启动与停止、mysql使用cmd命令行登录、SQLyog下载与安装,sqlyog登录与操作mysql_是谢添啊的博客-CSDN博客
网址:https://blog.csdn.net/qq_62982856/article/details/127768220?spm=1001.2014.3001.5501
12.2.2.1 创建一个新项目student_manage
12.2.2.2 下载jar包
这里我们需要下载三个 jar 包,由于我在这里是直接访问外网,因此如果你的网速不行请切换为流量。
12.2.2.2.1 commons-dbutils-1.7.jar
🏠 下载地址:https://repo1.maven.org/maven2/commons-dbutils/commons-dbutils/1.7/
12.2.2.2.2 druid-1.1.10.jar
🏠 下载地址:https://repo1.maven.org/maven2/com/alibaba/druid/1.1.10/
12.2.2.2.3 mysql-connector-java-xxx.jar
这里需要特别注意,需要下载的数据库驱动jar包根据你的mysql版本会有所不同。
查看自己的mysql版本:
mysqld --version
1️⃣ 如果你是mysql5.7的版本
🏠 下载地址:https://repo1.maven.org/maven2/mysql/mysql-connector-java/5.1.37/
2️⃣ 如果你是mysql8.0的版本
🏠 下载地址:https://repo1.maven.org/maven2/mysql/mysql-connector-java/8.0.16/
12.2.2.3 创建管理jar包的文件夹library
1️⃣ 在student_manage文件夹下创建一个library文件夹,将commons-dbutils、druid、mysql-connector-java拷贝到library文件夹下
由于我装的是mysql8.0的版本,因此我使用的jar包时mysql-connector-java-8.0.16.jar
2️⃣ 将jar包添加至项目
12.2.2.4 添加druid.properties文件至src目录下
druid.properties文件内容:(password的值你需要依照自己的实际设置情况来定)
- 如果你是mysql5.7的版本
driverClassName=com.mysql.jdbc.Driver url=jdbc:mysql://localhost:3306/student?rewriteBatchedStatements=true&serverTimezone=GMT&useSSL=false #数据库用户名 username=root #数据库密码,这里需要依照自己的实际情况 password=123456 initialSize=10 #min idle connecton size minIdle=5 #max active connection size maxActive=20 #max wait time (5000 mil seconds) maxWait=5000
- 如果你是mysql8.0的版本
driverClassName=com.mysql.cj.jdbc.Driver url=jdbc:mysql://localhost:3306/student?rewriteBatchedStatements=true&serverTimezone=GMT&useSSL=false #数据库用户名 username=root #数据库密码,这里需要依照自己的实际情况 password=123456 initialSize=10 #min idle connecton size minIdle=5 #max active connection size maxActive=20 #max wait time (5000 mil seconds) maxWait=5000
12.2.2.5 src下创建utils文件夹并创建类
12.2.2.5.1 JDBCUtilsByDruid类
package utils; import com.alibaba.druid.pool.DruidDataSourceFactory; import javax.sql.DataSource; import java.io.FileInputStream; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.util.Properties; public class JDBCUtilsByDruid { private static DataSource dataSource; static{ try { Properties properties = new Properties(); properties.load(new FileInputStream("src//druid.properties")); dataSource = DruidDataSourceFactory.createDataSource(properties); } catch (Exception e) { e.printStackTrace(); } } //获取连接 public static Connection getConnection(){ try { return dataSource.getConnection(); } catch (SQLException e) { throw new RuntimeException(e); } } //关闭连接 public static void close(ResultSet resultSet, PreparedStatement preparedStatement, Connection connection){ try { if(resultSet!=null){ resultSet.close(); } if(preparedStatement!=null){ preparedStatement.close(); } if(connection!=null){ connection.close(); } } catch (SQLException e) { throw new RuntimeException(e); } } }
12.2.2.5.2 ScreenUtils类
package utils; import java.awt.*; public class ScreenUtils { /* 获取当前电脑屏幕的宽度 */ public static int getScreenWidth(){ return Toolkit.getDefaultToolkit().getScreenSize().width; } /* 获取当前电脑屏幕的高度 */ public static int getScreenHeight(){ return Toolkit.getDefaultToolkit().getScreenSize().height; } }
12.2.2.5.3 StringUtils类
package utils; /** * 字符串工具类 */ public class StringUtils { /** * 判断是否 str 是否为合法文本内容 */ public static boolean hasText(String str) { return str != null && !str.isEmpty() && containsText(str); } private static boolean containsText(CharSequence str) { int strLen = str.length(); for(int i = 0; i < strLen; ++i) { if (!Character.isWhitespace(str.charAt(i))) { return true; } } return false; } }