资讯动态

基于JavaSwing的校园宿舍管理系统设计:从数据库到界面开发全攻略

发布时间:2026/10/26 22:46:22 来源:尧图企业网站定制
简介面向高校学生与Java初学者的校园宿舍管理系统毕业设计项目利用JavaSwing构建直观易操作的桌面端界面通过SQL语言完成数据库增删改查覆盖学生信息管理、宿舍分配、资源预约、违规记录和报表统计等核心管理场景。资源包共199个文件以Java源码.java/.class和JSP页面为主体包含Jar依赖库、SQL数据库脚本、毕业设计文档以及界面相关图片与样式文件整包约7.88MB目录结构按模块组织便于定位与二次开发。已有320人浏览学习适合作为毕业设计、课程设计的完整参考方案。配套毕业设计文档详细阐述了设计思路、整体架构与实现方法源代码数据访问层覆盖学生、宿舍、楼栋、违规记录等实体模块划分明确有助于理解JavaSwing界面开发与JDBC数据库操作的协作方式也能在此基础上拓展自动匹配宿舍、预约冲突检测等进阶功能。1. 基于JavaSwing的校园宿舍管理系统为什么它是课设和毕设的“安全牌”如果你正在为Java课设或毕业设计发愁大概率搜过“基于JavaSwing校园宿舍管理系统”这类标题。这类项目之所以常年排在搜索结果前面是因为它把“能运行的桌面客户端”和“能交差的数据库SQL脚本”打包成了一个完整方案Java Swing负责界面JDBC负责连接MySQL或SQL ServerSQL脚本负责建库建表插数据再配上一本毕业设计文档正好覆盖课程设计答辩的所有硬性要求。下面就从功能拆解、表设计、Swing代码、SQL脚本、常见坑这几个角度把这条链路完整讲一遍。2. 先把功能拆明白宿舍管理系统的模块划分与数据库表设计很多同学拿到源码后第一件事是打开Eclipse按F5跑起来结果演示的时候老师问一句“你这个系统到底有哪些功能”支支吾吾答不上来。其实一套合格的校园宿舍管理系统功能边界非常清晰管理员能登录、能维护学生和宿舍信息、能安排入住和退宿、能登记报修、能查统计。作为答辩项目你不需要做成企业级SaaS只要把闭环走通即可。在开始写代码之前我一般会先在笔记本上画一张功能清单把每个界面的按钮、表格、文本框列出来。这不只是给写代码做指引更是后面写毕业设计文档里“需求分析”章节的素材。别小看这一步很多翻车现场都是因为功能没想清楚就写写到一半发现表结构对不上。2.1 六个核心模块先对着功能清单画界面校园宿舍管理系统至少要涵盖以下模块登录与用户管理管理员账号密码验证最好区分超级管理员和普通管理员对应一张用户表字段至少包括用户名、密码、角色。学生信息管理学生的学号、姓名、性别、学院、专业、班级、联系方式、宿舍编号。这个模块是增删改查的重头戏界面就是一个表格加四个按钮。宿舍信息管理楼栋、房间号、床位数量、已住人数、宿舍状态正常/维修/停用。注意宿舍表和学生表之间是分配关系不是直接挂一个字段就结束。入住与退宿管理登记学生入住某宿舍更新该宿舍的已住人数退宿时删除或归档分配记录。这个模块最容易出逻辑问题后面避坑章会详细讲。报修管理学生或管理员提交报修单记录宿舍号、报修内容、报修时间、处理状态处理完成由管理员更新状态。扩展功能可按需加卫生检查、晚归登记、来访管理。这些不作为核心但如果你想让系统看起来工作量更大可以选一两个加进文档。我建议把登录做成独立窗口其余功能做成一个主窗口的多个Tab页。这样代码结构是“登录窗口 主界面 每个功能的Panel”老师一看就知道你懂分层。2.2 数据库表怎么建学生表、宿舍表、分配记录表的关系设计数据库设计是答辩时老师最喜欢追问的部分。你不需要搞多复杂但必须把主外键关系讲清楚。常见做法是建五张表用户表、学生表、宿舍表、入住记录表、报修表。下面是字段设计参考表名关键字段说明t_userid, username, password, role管理员账号role区分超级/普通t_studentid, stu_no, name, gender, department, major, class_name, phone学生基本信息stu_no唯一t_dormitoryid, building, room_no, bed_count, occupied_count, status楼栋房间号组合应唯一t_assignid, stu_id, dorm_id, move_in_time, move_out_time, status入住记录status区分当前/已退宿t_repairid, dorm_id, content, create_time, status报修单关联宿舍这里最关键的是t_student和t_dormitory之间不要直接加“宿舍ID”字段而是通过t_assign表记录分配关系。这样设计的好处是同一个学生可以查历史住宿记录宿舍已住人数可以通过统计t_assign里status为“当前入住”的记录计算不会出现更新遗漏。外键设置上t_assign的stu_id关联t_student.iddorm_id关联t_dormitory.idt_repair的dorm_id关联t_dormitory.id。其余表之间不需要额外外键避免级联删除的坑。如果你想让设计更像真实系统可以加一张t_building表存楼栋信息但三张主表和两张关系表已经足够支撑一个完整的毕业设计。2.3 毕业设计文档里这五张图必须画很多评阅老师其实不看代码先翻文档里的图。最容易被抽查的是系统流程图、功能结构图、E-R图、数据库表关系图、界面原型图。这五张图如果你能画出来文档的骨架就立住了。功能结构图最简单直接按模块列表画树状图E-R图画出实体和关系矩形框是实体菱形是关系数据库表关系图可以直接在Navicat或SQL Server Management Studio里用“逆向图表”功能生成省时省力流程图重点画“入住申请→宿舍分配→更新容量→生成记录”和“报修提交→维修处理→状态反馈”两条主线。界面原型图不用精修用Swing窗口截图贴进去都行。需要注意的是文档里的“数据库设计”章节要把建表SQL贴进去而不是只贴一张图。SQL脚本就是咱们的“数据库SQL”交付物答辩时老师会让你现场打开数据库管理器查看表结构所以脚本必须能在干净环境里一键执行。这点后面第4章会细说。另外文档中的“需求分析”部分不要直接复制网上模板老师对模板很敏感换几个流程描述、换一个宿舍楼的名称都比一字不改强。3. 用JavaSwing把界面搭起来从登录框到学生管理窗口这一章是动手环节。假设你已经建好Java工程接下来要解决三件事怎么引入数据库驱动怎么写第一个能验证账号的窗口怎么把数据库里的学生数据显示成表格。3.1 新建工程与依赖Swing不需要额外jarJDBC驱动怎么引Java Swing是JDK自带的GUI组件库JFrame、JButton、JTable这些都在javax.swing包下所以工程不需要任何额外界面依赖。你只需要一个数据库驱动jar包如果用MySQL下载mysql-connector-java8.0版本之后包名是com.mysql.cj.jdbc.Driver如果用SQL Server下载mssql-jdbc驱动包。在IDEA里把驱动jar文件复制到项目根目录的lib文件夹然后右键jar选择“Add as Library”。在Eclipse里同样操作也可以直接在项目属性里的Java Build Path中添加外部jar。这一步做不对后面运行时就会报“ClassNotFoundException: com.mysql.cj.jdbc.Driver”。这里不采用Maven是为了贴近大多数课设环境很多学校机房电脑没有配Maven仓库直接放lib最保险。如果你的机器能联网也可以用Maven引入mysql-connector-java依赖但最终提交源码时还是要把jar一并放进去否则换一台机器就跑不起来。3.2 登录窗口的完整代码JFrame、JTextField、JPasswordField与事件监听登录窗口应该是你写的第一个Swing窗口。下面是一个最小可运行版本包含两个输入框和一个登录按钮点击后调用后台验证方法import javax.swing.*; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; public class LoginFrame extends JFrame { private JTextField usernameField new JTextField(15); private JPasswordField passwordField new JPasswordField(15); private JButton loginBtn new JButton(登录); private JButton resetBtn new JButton(重置); public LoginFrame() { setTitle(校园宿舍管理系统 - 登录); setSize(360, 220); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setLocationRelativeTo(null); // 窗口居中 JPanel panel new JPanel(new GridLayout(3, 2, 10, 10)); panel.setBorder(BorderFactory.createEmptyBorder(20, 20, 20, 20)); panel.add(new JLabel(用户名:)); panel.add(usernameField); panel.add(new JLabel(密码:)); panel.add(passwordField); JPanel btnPanel new JPanel(new FlowLayout()); btnPanel.add(loginBtn); btnPanel.add(resetBtn); panel.add(btnPanel); // 事件登录和重置 loginBtn.addActionListener(new ActionListener() { Override public void actionPerformed(ActionEvent e) { String username usernameField.getText().trim(); String password new String(passwordField.getPassword()).trim(); if (UserDao.checkLogin(username, password)) { JOptionPane.showMessageDialog(LoginFrame.this, 登录成功); // 打开主窗口关闭登录窗口 // new MainFrame().setVisible(true); // dispose(); } else { JOptionPane.showMessageDialog(LoginFrame.this, 用户名或密码错误); } } }); resetBtn.addActionListener(e - { usernameField.setText(); passwordField.setText(); }); add(panel); } public static void main(String[] args) { SwingUtilities.invokeLater(() - { new LoginFrame().setVisible(true); }); } }这段代码的逻辑说明JTextField和JPasswordField分别接收用户名和密码注意密码框要用getPassword()拿到char数组再转字符串直接getText()在Swing组件中已被废弃。登录按钮注册的是ActionListener点击后调用UserDao.checkLogin()。我没写UserDao的细节它负责打开数据库连接并执行SELECT查询返回true表示账号存在且密码匹配。这个DAO方法的实现很简单就是执行“SELECT COUNT(*) FROM t_user WHERE username? AND password?”返回count 0等第4章的连接工具写好后就能直接跑通。布局参数说明主面板用GridLayout(3, 2, 10, 10)表示3行2列水平和垂直间距都是10像素外边框用BorderFactory.createEmptyBorder(20,20,20,20)让控件不贴边。使用setLocationRelativeTo(null)让窗口出现在屏幕中央这是Swing窗口的常见习惯。main方法里用SwingUtilities.invokeLater启动窗口确保界面更新发生在事件调度线程。注意reset按钮事件用了lambda表达式是Java 8以后的写法如果你用的是老JDK改回匿名内部类即可。3.3 数据表格JTable显示学生列表TableModel与数据库查询怎么接登录之后的主窗口里最核心的控件就是JTable。把MySQL查询结果填充到表格的常规写法是import javax.swing.*; import javax.swing.table.DefaultTableModel; import java.sql.*; public class StudentPanel extends JPanel { private JTable table; private DefaultTableModel model; public StudentPanel() { setLayout(new BorderLayout()); String[] columns {学号, 姓名, 性别, 学院, 专业, 电话}; model new DefaultTableModel(columns, 0); table new JTable(model); table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); add(new JScrollPane(table), BorderLayout.CENTER); loadData(); } private void loadData() { String sql SELECT stu_no, name, gender, department, major, phone FROM t_student; try (Connection conn DBUtil.getConnection(); Statement stmt conn.createStatement(); ResultSet rs stmt.executeQuery(sql)) { // 先清空旧数据 model.setRowCount(0); while (rs.next()) { model.addRow(new Object[]{ rs.getString(stu_no), rs.getString(name), rs.getString(gender), rs.getString(department), rs.getString(major), rs.getString(phone) }); } } catch (SQLException e) { JOptionPane.showMessageDialog(this, 查询失败: e.getMessage()); } } }这里的核心逻辑是DefaultTableModel它用一个二维集合存储数据构造时传列名和初始行数0。每次查询前调用model.setRowCount(0)清空旧行然后循环ResultSet的next()把每一列封装成Object数组添加到model中。JTable不直接接触ResultSet所有数据都通过TableModel流转这样当你想加“按姓名模糊查询”时只要改SQL和model即可。参数说明setSelectionMode(SINGLE_SELECTION)限制只能选中一行避免删除操作时误删多行。JScrollPane是必须的否则表头不会显示。如果你在Swing的Panel里用了BorderLayout.CENTER记得给StudentPanel设置一个布局管理器我一般直接继承JPanel并setLayout(new BorderLayout())。3.4 Swing界面布局参数BorderLayout、GridBagLayout怎么调才不翻车Swing布局管理器里新手最容易翻车的是GridBagLayout因为它的参数太多了。实际做毕设界面我建议优先用BorderLayout BoxLayout GridLayout的组合只有在做复杂表单时再用GridBagLayout。BorderLayout分五个区域NORTH、SOUTH、WEST、EAST、CENTER。CENTER区域会占满剩余空间所以主界面通常把JTable放在CENTER把导航按钮放在NORTH或WEST。GridBagLayout最常用的参数是gridx、gridy、weightx、weighty、fill、insets其中weightx和weighty一定要设置否则窗口拉大时控件不会跟随拉伸。一个常见的表单布局示例两个标签、两个文本框并排用GridBagLayout时可以这样设置参数表组件gridxgridyweightxfill说明标签“宿舍号”000NONE不拉伸输入框101HORIZONTAL水平填充标签“楼栋”010NONE下一行输入框111HORIZONTAL水平填充很多同学直接把别人布局代码复制过来改一下组件名称就完事结果自己加一个组件之后全部错位。原因就是没搞懂gridx/gridy的坐标含义。这个坐标指的是网格坐标不是绝对像素新增组件要占一个格子。宁可花十分钟在纸上画一下网格也不要盲猜参数。4. 数据库SQL脚本从建库到初始化数据一次跑通4.1 SQL Server还是MySQL毕设选型建议这个二选一经常让同学纠结。我的建议是先看学校机房装了哪个。如果课程设计说明里要求SQL Server就用SQL Server如果只是说“数据库”那就用MySQL因为MySQL驱动小、配置简单、能用的管理工具多。对比一下对比项MySQLSQL Server驱动包mysql-connector-java-8.x.jarmssql-jdbc-12.x.jar默认端口33061433安装体积小大图形工具Navicat/DBeaver/WorkbenchSSMS自增语法AUTO_INCREMENTIDENTITY(1,1)如果你已经在网上找到了“基于JavaSwing校园宿舍管理系统”的源码先检查它的SQL脚本是MySQL版还是SQL Server版。很多源码包里的SQL文件写的是MySQL语法但学校机房要求SQL Server直接跑会报一堆语法错误。换库的成本不低所以选型一定要在动手前定死。4.2 建库建表脚本主键、外键、默认值的写法以MySQL为例建库建表脚本可以写成这样CREATE DATABASE IF NOT EXISTS dormitory_db DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci; USE dormitory_db; CREATE TABLE t_user ( id INT PRIMARY KEY AUTO_INCREMENT, username VARCHAR(30) NOT NULL UNIQUE, password VARCHAR(50) NOT NULL, role VARCHAR(10) DEFAULT admin ); CREATE TABLE t_student ( id INT PRIMARY KEY AUTO_INCREMENT, stu_no VARCHAR(20) NOT NULL UNIQUE, name VARCHAR(30) NOT NULL, gender ENUM(男,女) NOT NULL, department VARCHAR(50), major VARCHAR(50), class_name VARCHAR(50), phone VARCHAR(20) ); CREATE TABLE t_dormitory ( id INT PRIMARY KEY AUTO_INCREMENT, building VARCHAR(20) NOT NULL, room_no VARCHAR(10) NOT NULL, bed_count INT DEFAULT 4, occupied_count INT DEFAULT 0, status VARCHAR(10) DEFAULT normal, UNIQUE KEY uk_building_room (building, room_no) ); CREATE TABLE t_assign ( id INT PRIMARY KEY AUTO_INCREMENT, stu_id INT NOT NULL, dorm_id INT NOT NULL, move_in_time DATETIME DEFAULT CURRENT_TIMESTAMP, move_out_time DATETIME, status VARCHAR(10) DEFAULT active, FOREIGN KEY (stu_id) REFERENCES t_student(id), FOREIGN KEY (dorm_id) REFERENCES t_dormitory(id) );这段脚本的要点数据库字符集用utf8mb4而不是utf8因为utf8mb4能存emoji和生僻字宿舍管理要填的学生姓名偶尔会有生僻字。主键全部用自增int业务上唯一的字段学号、用户名、楼栋房间组合单独加UNIQUE约束而不是把逻辑主键设成学号。外键写在建表语句末尾让stu_id和dorm_id分别指向学生表和宿舍表。需要注意t_assign引用的是t_student和t_dormitory的id而不是学号或房号这是为了查询性能和修改方便。如果你用SQL Server自增语法要改成IDENTITY(1,1)DATETIME默认值用GETDATE()。4.3 初始化数据与测试账号管理员、楼栋、宿舍的SQL插入建表之后必须插入至少一个管理员账号否则你连登录都进不去。常见的测试账号是admin/123456对应SQLINSERT INTO t_user (username, password, role) VALUES (admin, 123456, super); INSERT INTO t_dormitory (building, room_no, bed_count) VALUES (1号楼, 101, 4), (1号楼, 102, 4), (2号楼, 201, 6); INSERT INTO t_student (stu_no, name, gender, department, major, class_name, phone) VALUES (2023001, 张伟, 男, 信息学院, 计算机科学, 计科2301, 13800000001), (2023002, 李娜, 女, 信息学院, 软件工程, 软工2301, 13800000002);初始化数据的参数说明t_dormitory的occupied_count先不写默认0等插入t_assign后再手动UPDATE不过更好的做法是写一个存储过程或者在Java程序里分配宿舍成功后update这个字段。测试账号的密码不要加密纯文本就行因为答辩时老师会打开数据库看数据加密反而要解释半天。需要注意的是这些INSERT语句顺序有讲究先用户再宿舍再学生最后才是入住记录。因为t_assign依赖学生和宿舍的主键id如果先插入t_assign再插入t_student会违反外键约束。很多同学在跑SQL时报“ForeignKey constraint fails”就是这个顺序问题。4.4 数据库连接字符串与JDBC驱动类名和URL的常见写法Java连接数据库通常写一个DBUtil.java把连接过程封装成静态方法。以MySQL为例import java.sql.*; public class DBUtil { private static final String DRIVER com.mysql.cj.jdbc.Driver; private static final String URL jdbc:mysql://localhost:3306/dormitory_db?useSSLfalseserverTimezoneAsia/ShanghaicharacterEncodingutf8; private static final String USER root; private static final String PASSWORD 123456; public static Connection getConnection() throws SQLException { try { Class.forName(DRIVER); } catch (ClassNotFoundException e) { e.printStackTrace(); } return DriverManager.getConnection(URL, USER, PASSWORD); } }这段代码的参数说明驱动类名在8.x版本是com.mysql.cj.jdbc.Driver老版本是com.mysql.jdbc.Driver别搞混。URL里的useSSLfalse是关闭安全连接本机学习不需要SSLserverTimezoneAsia/Shanghai是应对MySQL 8.x时区报错characterEncodingutf8保证中文写入不乱码。如果使用SQL Server驱动类是com.microsoft.sqlserver.jdbc.SQLServerDriverURL写法是jdbc:sqlserver://localhost:1433;DatabaseNamedormitory_db用户名密码通常是sa。两种数据库连接代码结构一致换DBUtil里的常量就行。5. 避坑现场SwingSQL最常见的六个翻车点5.1 窗口卡死转圈Swing线程模型用错了现象点击“查询所有学生”按钮后整个窗口卡住拖都拖不动过几十秒才恢复。原因你在事件监听器里直接执行了数据库查询。Swing的界面事件是在EDT事件分派线程上跑的数据库查询是耗时操作会阻塞EDT导致界面无法重绘。解决把耗时操作放到新线程中查询完成后用SwingUtilities.invokeLater回到EDT更新界面。简单写法new Thread(() - { // 执行数据库查询 ListStudent list studentDao.findAll(); SwingUtilities.invokeLater(() - { // 更新JTable fillTable(list); }); }).start();更规范的做法是用SwingWorker但毕设代码里用上面的写法也够用老师主要看你有没有意识到线程问题。5.2 中文乱码控制台和界面中文变成问号现象数据库里显示正常但Swing界面上中文全是问号或者控制台打印出来的SQL日志中文乱码。原因三个环节的字符集不一致源文件编码、JDBC连接编码、数据库表编码。源文件如果是GBK而JVM默认UTF-8字符串截取和显示就会错乱。解决IDE里把项目编码统一为UTF-8JDBC URL加上characterEncodingutf8建库时用utf8mb4如果还乱码检查一下Windows区域设置里的“非Unicode程序语言”如果是中文系统一般没问题。血泪经验改编码一定要三个地方一起改只改一处没有用。5.3 Java连接SQL Server报“TCP/IP连接失败”现象程序启动后报错“Connection refused: connect”或“The TCP/IP connection to the host localhost, port 1433 has failed”。原因SQL Server安装后默认可能禁用了TCP/IP协议或者SQL Server Browser服务没开或者实例名不匹配。解决打开“SQL Server Configuration Manager”找到“SQL Server网络配置”里的实例把“TCP/IP”状态改为“启用”然后右键“SQL Server服务”重启。JDBC URL里如果你用的是命名实例要写成jdbc:sqlserver://localhost\SQLEXPRESS:1433;DatabaseNamedormitory_db端口号要和配置里的一致。这一步对很多不熟悉SQL Server的人来说是最大的拦路虎建议在项目开始前先花二十分钟配置好别等到答辩前一天才连。5.4 JTable不刷新数据改完界面还是旧的现象点“新增学生”后后台数据库里多了一条记录但JTable里看不到必须重启程序才能显示。原因你没有在新增或修改操作后重新加载表格数据。JTable的数据来自DefaultTableModel对象数据库更新不会自动通知TableModel。解决在增删改操作成功后调用表格数据加载方法或者手动触发模型更新。常见做法是public void refresh() { model.setRowCount(0); // 清空模型 loadData(); // 重新查询并addRow }还有一种情况是你把新的DefaultTableModel对象重新setModel了但没有给JTable设置视图这时也会有类似的问题。建议全局始终持有一个model实例不要每次查询都new一个新的。5.5 打包成jar后连不上数据库驱动和配置路径问题现象在IDE里点运行一切正常但导出成可执行jar后双击运行报找不到驱动类或连不上数据库。原因包含两种情况。一是驱动jar没有被包含进最终的jar包二是数据库配置文件如db.properties写在src目录下打包后路径读不到。解决如果不用Maven可以借助IDEA的“Artifacts”配置实现“Build on make”并且在“Output Layout”里把lib目录下的驱动jar加进去或者在MANIFEST.MF里写Class-Path指向相对路径。最简单的办法是用Maven的maven-assembly-plugin打成fat-jar把所有依赖解压后合并到一个jar里。配置文件方面建议把连接参数放到运行目录下的db.properties用文件流读取而不是classpath读取这样换机器改配置不用重新打包。5.6 SQL脚本在两种数据库之间切换语法报错不断现象网上下载的源码包SQL文件是MySQL的你非要在SQL Server里执行结果AUTO_INCREMENT不认识、ENGINEInnoDB不认识、字段名反引号不认识。原因两种数据库方言不同。MySQL的AUTO_INCREMENT、ENUM在SQL Server里对应IDENTITY、VARCHAR或CHECK约束。解决动手前先确认你的目标数据库。如果非要在SQL Server跑自己重写建表脚本把AUTO_INCREMENT换成IDENTITY(1,1)把ENGINE和CHARSET那行删掉把反引号去掉把DATETIME默认值改成GETDATE()。重写比调试快得多。反过来说如果你拿到的是SQL Server脚本要转MySQL也要把IDENTITY换成AUTO_INCREMENT把nvarchar换成VARCHAR把GETDATE()换成CURRENT_TIMESTAMP。6. 答辩前最后一步把数据库配置抽到外部文件打包成可执行 jar到这里系统已经能在你自己的电脑上完美运行但答辩是在办公室的电脑上环境不同很容易当场翻车。我吃过一次亏答辩教室的MySQL密码和我不一样我直接改代码重新编译结果时间来不及界面黑屏。后来学聪明了把配置单独拎出来。6.1 用 db.properties 管理驱动、URL、用户名和密码在项目根目录加一个db.properties文件db.drivercom.mysql.cj.jdbc.Driver db.urljdbc:mysql://localhost:3306/dormitory_db?useSSLfalseserverTimezoneAsia/ShanghaicharacterEncodingutf8 db.userroot db.password123456Java里读取Properties props new Properties(); try (InputStream in new FileInputStream(db.properties)) { props.load(in); String driver props.getProperty(db.driver); String url props.getProperty(db.url); String user props.getProperty(db.user); String password props.getProperty(db.password); // 用这些值建立连接 }这样演示前只要用文本编辑器改一下密码不需要重新编译。注意FileInputStream默认读取的是程序运行目录下的文件所以db.properties要放在jar文件的同一目录。6.2 打包时把 sql 脚本和文档放进交付目录交付给老师的完整目录我一般是这样宿舍管理系统/ ├── lib/ # 数据库驱动jar ├── db.properties # 数据库连接配置 ├── sql/init.sql # 建库建表脚本 ├── docs/设计文档.docx └── dormitory-system.jar # 可执行程序做成zip一起交。答辩时先执行sql脚本再启动jar全程不依赖IDE。sql脚本和文档在源码包里本身就是交付物协调好版本。6.3 给演示机器预装数据库并写一个一键启动.batWindows演示机最稳妥的是写一个启动脚本echo off echo 正在启动校园宿舍管理系统... start /min cmd /c net start MySQL timeout /t 2 nul java -jar dormitory-system.jar pause这个脚本先确保MySQL服务启动然后运行jar。注意如果你用的连接账号不是root记得提前在MySQL里授权。数据库连接不上时程序里要做好弹窗提示至少告诉用户检查db.properties别让用户面对一堆堆栈日志。我的习惯是答辩前一天用一台没装开发环境的电脑完整走一遍装数据库、跑SQL脚本、改配置、双击jar、登录、演示增删改查。这套流程走下来上面提到的坑基本都提前踩完。把外部化配置和打包脚本这两个准备工作做好你答辩时就能专心讲业务逻辑而不是手忙脚乱调环境。希望帮到你。本文还有配套的精品资源点击获取

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑