我已经尝试过很多次了,但我从未这样做过,这是我的代码
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编程的基础知识! 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!
为了使查询尽可能快,您应该在名称列上设置索引。即使有很多行,这也会加快查找过程!
在尝试中,我在关闭之前尝试了结果集和语句,并将其发送给我
结果集:
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