我已经尝试过很多次了,但我从未尝试过,这是我的代码
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上做一个公会插件,并从MySQL获取数据该代码是关于检查行是否不存在并输出到布尔
我建议您学习更多关于Java编程的基础知识!《我的世界》是开始编程的好方法,但你应该对正确地做事感兴趣。
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,因为有些行具有匹配的名称列。
你应该自己做的一些想法:
名称列中包含什么?如果是公会的名字,那没关系,但如果是玩家的名字,你应该考虑重新考虑你的代码。《我的世界》中的玩家可以更改他们的名字,因此会在你的服务器上失去他们的公会。《我的世界》中的玩家由他们的UUID唯一识别,这一点永远不会改变。也许可以考虑使用UUID!
为了使查询尽可能快,您应该在名称列上设置一个INDEX。这将加快查找过程,即使有很多行!
尽管如此:欢迎使用StackOverflow!我希望我能帮助你,我希望编程有很多乐趣。
在try中,我在关闭前尝试sout resultSet和语句,它会将其发送给我
resultSet:
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