我正在为我的Minecraft服务器编写一个bukkit插件,并且我的代码在Result set部分的编写类和方法的方式错误,或者我认为是错误的。
它没有检测到我的播放器已经在SQL表中。这是在hasPlayer方法中。
@EventHandler
public void onPlayerJoin(PlayerJoinEvent event) {
Player p = event.getPlayer();
SQLCheckPlayer pCheck = new SQLCheckPlayer();
pCheck.p = p;
boolean i = pCheck.hasPlayer();
if (i == false) {
boolean n = pCheck.addPlayer();
if (n == true) {
p.sendMessage("You have been added to our database");
} else {
p.sendMessage("There was errors in trying to add you to our database");
}
} else {
p.sendMessage("You are in our database");
}
}
SQLCheckPlayer类
public class SQLCheckPlayer {
Player p;
public boolean hasPlayer() {
UUID pUUID = p.getUniqueId();
String query = "SELECT playerID FROM playerInfo;";
try {
if (sqlConnection.getDatabaseConnection() != null) {
Statement st = sqlConnection.getDatabaseConnection().createStatement();
ResultSet rs = st.executeQuery(query);
if (rs != null) {
do{
if(pUUID.toString() == rs.toString()) {
st.close();
Bukkit.broadcastMessage("Player successfully added");
return true;
}
} while(rs.next());
}
st.close();
} else {
Bukkit.broadcastMessage("Database connection is null");
return false;
}
return false;
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
Bukkit.broadcastMessage("Sql Exception");
return false;
}
}
public boolean addPlayer() {
UUID pUUID = p.getUniqueId();
try {
PreparedStatement st = sqlConnection.getDatabaseConnection().prepareStatement("INSERT INTO playerInfo (playerID, playerName, playerDiamonds) VALUES (?, ?, ?)");
st.setString(1, pUUID.toString());
st.setString(2, p.getDisplayName());
st.setInt(3, 0);
st.executeUpdate();
st.close();
return true;
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
return false;
}
}
}
将我添加到数据库后(它可以成功完成此操作),无论何时我加入,它都应该显示“您在我们的数据库中”,但始终显示为“尝试将您添加到我们的数据库时出错”。在打印中,打印堆栈跟踪显示该代码试图将我再次添加到数据库中,但由于我在playerUUID列上放置了一个唯一的选项卡,所以无法进行添加。
最佳答案
你是在告诉我们
boolean i = pCheck.hasPlayer();
if (i == false) {
boolean n = pCheck.addPlayer();
if (n == true) {
p.sendMessage("You have been added to our database");
} else {
p.sendMessage("There was errors in trying to add you to our database");
}
} else {
p.sendMessage("You are in our database");
}
输出
"There was errors in trying to add you to our database"
。这是因为
pCheck.hasPlayer()
将是false
UUID pUUID = p.getUniqueId();
String query = "SELECT playerID FROM playerInfo;";
不考虑
pUUID
。相反,它将查找以"playerId"
作为其UUID
的条目。结果是尝试再次插入该播放器,由于某些数据库约束(唯一的主键或类似的东西),该播放器将无法工作。您可能需要将查询重写为类似
String query = "SELECT " + pUUID + " FROM playerInfo;";
然后再试一次。
我希望这有帮助...