You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

BungeeCord公会插件:MySQL行存在性检测布尔返回问题求助

修复BungeeCord公会插件的MySQL行会存在检测逻辑

你的代码存在几个核心问题,导致无法正确检测行会是否存在:

  • 创建了PreparedStatement但完全未使用,反而用Statement拼接SQL,这会引发SQL注入风险,还可能因名称含特殊字符(如单引号)导致SQL语法错误。
  • statement.execute()的返回值仅表示查询是否返回ResultSet,你没有实际检查结果集中是否存在数据,直接返回false,逻辑完全错误。
  • 数据库资源(Statement、ResultSet)未关闭,会导致连接池泄漏,长期运行会耗尽数据库连接。

以下是修正后的代码:

public static boolean checkHaveGuild(String name) {
    // 使用PreparedStatement防止SQL注入,通过try-with-resources自动关闭资源
    try (PreparedStatement ps = connection.prepareStatement("SELECT 1 FROM guild WHERE name = ?")) {
        ps.setString(1, name); // 绑定参数到SQL占位符
        try (ResultSet rs = ps.executeQuery()) {
            // 结果集有下一行则说明行会存在,直接返回布尔值
            return rs.next();
        }
    } catch (SQLException e) {
        e.printStackTrace(); // 建议替换为BungeeCord的Logger记录错误,避免插件崩溃
        return false;
    }
}

代码说明:

  • 用PreparedStatement预编译SQL,通过?占位符绑定参数,彻底避免SQL注入,同时兼容含特殊字符的行会名称。
  • 采用try-with-resources语法,自动关闭PreparedStatement和ResultSet,无需手动调用close(),杜绝资源泄漏。
  • 仅查询SELECT 1而非SELECT *,减少不必要的数据传输,提升查询性能。
  • 通过rs.next()直接判断结果集是否存在数据,存在则返回true(行会存在),否则返回false。
  • 异常处理改为打印堆栈信息(或使用BungeeCord日志系统),避免抛出RuntimeException导致插件崩溃。

内容的提问来源于stack exchange,提问作者ItDragClick

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 09:45:47