尧图网络科技YAOTU DIGITAL 获取报价
获取报价
首页 / 资讯中心 / 文章详情

Eclipse+Java Swing 桌面酒店管理系统:TaoToken 统一 Key 接入 MySQL 配置骨架

发布时间:2026/9/27 18:52:52

资讯中心
01
ARTICLE

Eclipse+Java Swing 桌面酒店管理系统:TaoToken 统一 Key 接入 MySQL 配置骨架

Eclipse+Java Swing 桌面酒店管理系统:TaoToken 统一 Key 接入 MySQL 配置骨架
1. 桌面酒店管理系统为什么总卡在数据库配置这一步Eclipse 下用 Java Swing 写桌面酒店管理系统是很多计算机专业课程设计和本地小型项目的主流选型。它不依赖浏览器双击就能跑前台开房、退房、房态查询这些操作响应快适合酒店前台这种单机或局域网场景。但真正动手写的时候大部分人卡住的地方不是 Swing 界面画不出来而是 MySQL 连接配置和密钥管理这两件事。我见过太多这样的项目JdbcUtil里硬编码root/123456换台电脑就报Access denied或者把 API Key 直接写进.java文件提交到 Git 之后被人扫到。更麻烦的是当你想给系统加一个「智能问答」或者「房态预测」的小功能时又要去申请一个新的模型 Key散落在各个类里改起来像拆炸弹。这篇内容就聚焦一个具体目标在 Eclipse 的 Java Swing 桌面酒店管理系统里把 MySQL 连接配置和 TaoToken 统一 Key 接入做成一套可复制的骨架。你会拿到db.properties和settings.json两个配置文件的完整写法知道怎么在 Swing 启动时加载它们怎么验证连接成功以及连接失败时按什么顺序排查。适合正在做课程设计、接私活、或者维护二手桌面项目的开发者。TaoToken 在这里的角色是统一 Key 入口。官网地址是 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content API 地址是 https://taotoken.net/api 。它把模型调用收敛到一个 Key 上桌面端只需要读一个配置项不用在代码里到处塞不同厂商的密钥。下面从环境准备开始一步步把骨架搭起来。2. TaoToken 统一 Key 与项目前置准备2.1 为什么桌面项目也需要统一 Key桌面酒店管理系统看起来是本地程序但它一旦要调用模型能力比如自动生成入住登记摘要、根据历史数据推荐房价、或者做一个前台话术助手就需要访问外部 API。如果每个功能都单独申请 Key代码里会出现key1、key2、key3维护成本高还容易泄露。TaoToken 的做法是提供一个统一的 API 入口你只需要在控制台创建一个 Key然后在settings.json里配置一次。Java 代码通过读取这个配置文件拿到 Key再拼接到请求头里。这样换 Key、换模型、加功能都只改一个地方。2.2 在 Eclipse 里确认项目结构打开你的 Eclipse 工作空间找到酒店管理系统项目确认目录结构大致如下HotelManager/ ├── src/ │ └── com/hotel/ │ ├── ui/ # Swing 窗体 │ ├── dao/ # 数据库访问 │ ├── util/ # 工具类 │ └── config/ # 配置加载 ├── lib/ # 第三方 jar ├── resources/ # 配置文件放这里 │ ├── db.properties │ └── settings.json └── bin/如果resources目录不存在右键项目 → New → Folder命名为resources。这个目录会被加入 Build Path运行时可以通过类加载器读取。2.3 获取 TaoToken Key 的入口访问控制台页面创建 API Key地址是 https://taotoken.net/console 。创建完成后复制 Key注意不要直接粘贴到聊天窗口或截图里。如果你后续要做长期编码或者 Agent 类功能可以了解 Coding Plan入口在 https://taotoken.net/coding-plan 。模型对话调试可以用 https://taotoken.net/models 接入文档在 https://taotoken.net/doc API Keys 管理在 https://taotoken.net/api-keys 。这些链接都带上了utm_sourcetaotoken_aicg_blog_endutm_content对应的内容标识和utm_campaignrewrite方便你从这篇内容直接跳转。2.4 MySQL 侧的准备确保本地 MySQL 服务已经启动并且有一个专门给酒店系统用的数据库。执行下面的 SQL 创建库和基础表CREATE DATABASE hotel_db DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci; USE hotel_db; CREATE TABLE room ( id INT PRIMARY KEY AUTO_INCREMENT, room_no VARCHAR(10) NOT NULL UNIQUE, room_type VARCHAR(20) NOT NULL, price DECIMAL(10,2) NOT NULL, status VARCHAR(10) DEFAULT 空闲 ); CREATE TABLE guest ( id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(50) NOT NULL, id_card VARCHAR(20) NOT NULL, phone VARCHAR(20), check_in_time DATETIME, room_id INT );创建一个专用账号不要用 root 跑应用CREATE USER hotel_applocalhost IDENTIFIED BY Hotel2024; GRANT ALL PRIVILEGES ON hotel_db.* TO hotel_applocalhost; FLUSH PRIVILEGES;这一步很重要。很多二手项目直接拿 root 连库一旦部署到别人机器上权限和密码都是问题。用专用账号后面db.properties里填的也是这个。3. 可复制的 db.properties 与 settings.json 骨架3.1 db.properties 完整写法在resources目录下新建db.properties内容如下# MySQL 连接配置 jdbc.drivercom.mysql.cj.jdbc.Driver jdbc.urljdbc:mysql://localhost:3306/hotel_db?useUnicodetruecharacterEncodingutf8serverTimezoneAsia/ShanghaiuseSSLfalseallowPublicKeyRetrievaltrue jdbc.usernamehotel_app jdbc.passwordHotel2024 # 连接池参数用 HikariCP 时生效 jdbc.pool.maximumPoolSize10 jdbc.pool.minimumIdle2 jdbc.pool.connectionTimeout30000 jdbc.pool.idleTimeout600000几个参数说明一下。serverTimezoneAsia/Shanghai不加的话MySQL 8 驱动会报时区错误。useSSLfalse在本地开发环境可以关掉生产环境建议开启。allowPublicKeyRetrievaltrue是 MySQL 8 默认认证方式下需要的否则会报Public Key Retrieval is not allowed。3.2 settings.json 完整写法同样在resources目录下新建settings.json{ taotoken: { apiKey: sk-你的TaoTokenKey, baseUrl: https://taotoken.net/api, model: claude-3-5-sonnet, timeout: 30000 }, app: { name: HotelManager, version: 1.0.0, debug: true }, database: { configFile: db.properties } }注意baseUrl写的是https://taotoken.net/api不要加 UTM 参数API 调用地址保持干净。apiKey这里先填占位符实际运行时从环境变量或者本地未提交的配置文件读取更安全。3.3 配置加载工具类在com.hotel.config包下新建ConfigLoader.javapackage com.hotel.config; import java.io.InputStream; import java.util.Properties; public class ConfigLoader { private static final Properties dbProps new Properties(); private static String taotokenApiKey; private static String taotokenBaseUrl; static { try (InputStream dbIn ConfigLoader.class.getClassLoader() .getResourceAsStream(db.properties)) { if (dbIn null) { throw new RuntimeException(db.properties 未找到请检查 resources 目录); } dbProps.load(dbIn); } catch (Exception e) { throw new RuntimeException(加载 db.properties 失败, e); } } public static String getDb(String key) { return dbProps.getProperty(key); } public static String getTaotokenApiKey() { if (taotokenApiKey null) { taotokenApiKey System.getenv(TAOTOKEN_API_KEY); if (taotokenApiKey null || taotokenApiKey.isEmpty()) { taotokenApiKey sk-你的TaoTokenKey; } } return taotokenApiKey; } public static String getTaotokenBaseUrl() { if (taotokenBaseUrl null) { taotokenBaseUrl https://taotoken.net/api; } return taotokenBaseUrl; } }这里优先从环境变量TAOTOKEN_API_KEY读取读不到再用占位符。这样本地调试方便提交代码也不会泄露真实 Key。3.4 数据库连接工具类在com.hotel.util包下新建DBUtil.javapackage com.hotel.util; import com.hotel.config.ConfigLoader; import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; public class DBUtil { private static final String DRIVER ConfigLoader.getDb(jdbc.driver); private static final String URL ConfigLoader.getDb(jdbc.url); private static final String USER ConfigLoader.getDb(jdbc.username); private static final String PASSWORD ConfigLoader.getDb(jdbc.password); static { try { Class.forName(DRIVER); } catch (ClassNotFoundException e) { throw new RuntimeException(MySQL 驱动未加载请检查 lib 目录, e); } } public static Connection getConnection() throws SQLException { return DriverManager.getConnection(URL, USER, PASSWORD); } public static void close(AutoCloseable... resources) { for (AutoCloseable r : resources) { if (r ! null) { try { r.close(); } catch (Exception ignored) { } } } } }这个类只做三件事加载驱动、拿连接、关资源。不要在这里写业务逻辑保持职责单一。4. 启动验证与成功结果确认4.1 写一个连接测试的 main 方法在com.hotel包下新建StartupCheck.javapackage com.hotel; import com.hotel.config.ConfigLoader; import com.hotel.util.DBUtil; import java.sql.Connection; import java.sql.ResultSet; import java.sql.Statement; public class StartupCheck { public static void main(String[] args) { System.out.println( 酒店管理系统启动自检 ); // 1. 检查配置加载 System.out.println(DB URL: ConfigLoader.getDb(jdbc.url)); System.out.println(TaoToken BaseUrl: ConfigLoader.getTaotokenBaseUrl()); System.out.println(TaoToken Key 前缀: ConfigLoader.getTaotokenApiKey().substring(0, 6) ...); // 2. 检查数据库连接 try (Connection conn DBUtil.getConnection(); Statement stmt conn.createStatement(); ResultSet rs stmt.executeQuery(SELECT COUNT(*) FROM room)) { if (rs.next()) { System.out.println(数据库连接成功room 表记录数: rs.getInt(1)); } } catch (Exception e) { System.err.println(数据库连接失败: e.getMessage()); e.printStackTrace(); } System.out.println( 自检结束 ); } }在 Eclipse 里右键这个文件 → Run As → Java Application。4.2 预期输出控制台应该输出类似下面的内容 酒店管理系统启动自检 DB URL: jdbc:mysql://localhost:3306/hotel_db?useUnicodetruecharacterEncodingutf8serverTimezoneAsia/ShanghaiuseSSLfalseallowPublicKeyRetrievaltrue TaoToken BaseUrl: https://taotoken.net/api TaoToken Key 前缀: sk-abc... 数据库连接成功room 表记录数: 0 自检结束 看到「数据库连接成功」就说明db.properties和DBUtil这条链路通了。room表记录数是 0 没关系说明表建好了但还没插数据。4.3 在 Swing 启动时调用自检在MainFrame.java的main方法里创建窗口之前先跑一次轻量检查public static void main(String[] args) { SwingUtilities.invokeLater(() - { try { DBUtil.getConnection().close(); System.out.println(启动前数据库检查通过); } catch (Exception e) { JOptionPane.showMessageDialog(null, 数据库连接失败请检查 db.properties\n e.getMessage(), 启动错误, JOptionPane.ERROR_MESSAGE); return; } new MainFrame().setVisible(true); }); }这样用户双击启动时如果数据库没配好会直接弹窗提示而不是等点到某个功能才报错。4.4 验证 TaoToken 请求链路写一个最小的 HTTP 请求测试确认 Key 和 baseUrl 能通。在com.hotel.util下新建ApiCheck.javapackage com.hotel.util; import com.hotel.config.ConfigLoader; import java.net.URI; import java.net.http.HttpClient; import java.net.http.HttpRequest; import java.net.http.HttpResponse; import java.time.Duration; public class ApiCheck { public static void main(String[] args) throws Exception { String url ConfigLoader.getTaotokenBaseUrl() /v1/models; HttpClient client HttpClient.newBuilder() .connectTimeout(Duration.ofSeconds(10)) .build(); HttpRequest request HttpRequest.newBuilder() .uri(URI.create(url)) .header(Authorization, Bearer ConfigLoader.getTaotokenApiKey()) .GET() .build(); HttpResponseString response client.send(request, HttpResponse.BodyHandlers.ofString()); System.out.println(状态码: response.statusCode()); System.out.println(响应体前 200 字符: response.body().substring(0, Math.min(200, response.body().length()))); } }状态码返回 200 说明 Key 有效、baseUrl 正确。如果返回 401检查 Key 是否复制完整返回 404检查 baseUrl 是否写成了https://taotoken.net/api。5. 本篇常见错误排查5.1 驱动类找不到报错信息java.lang.ClassNotFoundException: com.mysql.cj.jdbc.Driver原因通常是mysql-connector-java的 jar 没有放进lib目录或者没有 Add to Build Path。在 Eclipse 里右键项目 → Build Path → Configure Build Path → Libraries → Add JARs选中lib/mysql-connector-java-8.0.33.jar。如果用的是 Maven 项目检查pom.xml里有没有加依赖。5.2 时区报错报错信息The server time zone value ?D1ú±ê×?ê±?? is unrecognized这是 MySQL 8 驱动要求明确时区。在jdbc.url里加上serverTimezoneAsia/Shanghai即可。如果还是不行检查 MySQL 服务端的my.ini里default-time-zone配置。5.3 Public Key Retrieval 报错报错信息Public Key Retrieval is not allowed在jdbc.url末尾加allowPublicKeyRetrievaltrue。这个参数在 MySQL 8 默认的caching_sha2_password认证方式下需要。5.4 配置文件读不到报错信息db.properties 未找到请检查 resources 目录检查resources目录是否在 Build Path 的 Source 里。Eclipse 默认会把src当源码目录resources需要手动添加。右键项目 → Build Path → Configure Build Path → Source → Add Folder勾选resources。5.5 TaoToken 请求 401状态码 401 说明 Key 无效或没带上。检查三件事settings.json里的apiKey是否填了真实值环境变量TAOTOKEN_API_KEY是否覆盖了配置请求头是不是Authorization: Bearer sk-xxx格式。如果 Key 是从控制台复制的注意前后不要有空格。5.6 连接池参数不生效如果你用的是 HikariCPdb.properties里的jdbc.pool.*参数需要手动映射到HikariConfig对象。DriverManager本身不读这些参数。示例HikariConfig config new HikariConfig(); config.setJdbcUrl(ConfigLoader.getDb(jdbc.url)); config.setUsername(ConfigLoader.getDb(jdbc.username)); config.setPassword(ConfigLoader.getDb(jdbc.password)); config.setMaximumPoolSize(Integer.parseInt( ConfigLoader.getDb(jdbc.pool.maximumPoolSize)));不映射的话这些参数就是摆设。5.7 Swing 界面卡死如果在 EDT 线程里直接调DBUtil.getConnection()网络慢的时候界面会卡住。正确做法是把数据库操作放到SwingWorker的doInBackground里new SwingWorkerListRoom, Void() { Override protected ListRoom doInBackground() throws Exception { return roomDao.findAll(); } Override protected void done() { try { ListRoom rooms get(); roomTableModel.setRooms(rooms); } catch (Exception e) { JOptionPane.showMessageDialog(null, 加载房态失败); } } }.execute();这个坑在二手项目里特别常见界面一卡用户就以为程序死了。6. 把配置骨架用起来下一步动作到这里db.properties和settings.json两个骨架已经能跑通StartupCheck和ApiCheck两个自检类也验证了数据库和 Key 链路。接下来你可以把ConfigLoader和DBUtil直接复制到你的酒店管理系统里把room、guest表的 DAO 补上Swing 界面里用SwingWorker调 DAO。如果你在接入过程中遇到 Key 相关的问题比如 401、403、请求超时先去 API Keys 页面确认 Key 状态地址是 https://taotoken.net/api-keys 接入文档在 https://taotoken.net/doc 。需要调试模型返回内容用模型对话页面 https://taotoken.net/models 。如果你打算把这个桌面系统扩展成带 Agent 能力的长期项目比如自动处理订单、智能推荐房型可以看 Coding Plan入口在 https://taotoken.net/coding-plan 。最后提醒一句settings.json里的apiKey不要提交到 Git。在.gitignore里加上resources/settings.json团队协作时每人本地填自己的 Key。数据库密码同理db.properties也可以加入忽略列表提供一个db.properties.example模板给其他人参考。这样既跑得通又不会把敏感信息散出去。
02
RELATED NEWS

相关资讯

更多网站建设与数字化升级内容

03
WHY YAOTU

想打造同款高转化官网?

懂行业、懂生意,从建站到增长一站式陪跑

◈

场景化定制

不做模板站,围绕你的业务场景量身设计,小众不撞款。

◐

营销型架构

以转化目标组织内容与路径,让官网真正带来询盘。

▲

全周期服务

设计、开发、运营、运维一体,上线只是开始。

免费获取你的建站方案

留下需求,专属顾问 24 小时内为你输出方案建议。