检查行是否不存在 mysql 并将输出输出到 boolean bukkit

问题描述 投票:0回答:2

我已经尝试过很多次了,但我从未这样做过,这是我的代码

public static Boolean checkhaveguild(String name) {
    try {
        Statement statement = connection.createStatement();
        PreparedStatement ps = connection.prepareStatement("SELECT * FROM guild");
        System.out.println(statement.execute("SELECT * FROM guild WHERE name = "+name+""));
        System.out.println("----------");
    } catch (SQLException e) {
        throw new RuntimeException(e);
    }
    return false;
}

我正在 BungeeCord 上做一个 guild 插件并从 MySQL 获取数据 该代码是关于检查该行是否不存在并输出为布尔值

java mysql minecraft bungeecord
2个回答
1
投票

我建议你更多地了解Java编程的基础知识! Minecraft 是开始编程的好方法,但您应该对正确做事感兴趣。

public static boolean hasGuild(String name) {
        PreparedStatement statement = null;
        ResultSet resultSet = null;
        try {
            statement = connection.prepareStatement("SELECT COUNT(name) FROM guild WHERE name = ?");
            statement.setString(1, name);

            resultSet = statement.executeQuery();
            if (resultSet.next()) return resultSet.getInt(1) > 0;
        } catch (SQLException e) {
            // TODO properly handle exception
        } finally {
            if (resultSet != null) {
                try {
                    resultSet.close();
                } catch (SQLException e) {
                    // TODO properly handle exception
                }
            }

            if (statement != null) {
                try {
                    statement.close();
                } catch (SQLException e) {
                    // TODO properly handle exception
                }
            }
        }
        return false;
    }

关于这段代码的作用的一些想法:

  • 向数据库询问名称列与给定字符串匹配的行数。始终确保您只请求实现您的目的所需的数据。如果您只想回答是否有行,则请求所有列及其数据就太过分了。

  • 如果行数大于零,它将返回 true,因为存在具有匹配名称列的行。

你应该自己思考的一些想法:

  • 名称栏包含什么内容?如果这是公会的名字,那没问题,但如果这是玩家的名字,你应该考虑重新考虑你的代码。 Minecraft 中的玩家可以更改他们的名字,因此会在你的服务器上失去他们的公会。 《我的世界》中的玩家由他们的 UUID 唯一标识,该 UUID 永远不会改变。也许可以考虑使用 UUID!

  • 为了使查询尽可能快,您应该在名称列上设置索引。即使有很多行,这也会加快查找过程!


0
投票

在尝试中,我在关闭之前尝试了结果集和语句,并将其发送给我

结果集:

com.mysql.cj.jdbc.ClientPreparedStatement: SELECT COUNT(name) FROM guild WHERE name = 'a'

声明:

com.mysql.cj.jdbc.ClientPreparedStatement: SELECT COUNT(name) FROM guild WHERE name = ** NOT SPECIFIED **

返回 false 是我最后的测试,如果有则返回 true,如果没有则返回 false

© www.soinside.com 2019 - 2024. All rights reserved.