所以我一直在做我的一个项目,我正在努力为我的项目的玩家取得高分。目前,高分可以显示每项技能及其综合等级、经验值和每项技能的等级。我现在想做的就是让它显示出每项技能的声望水平。所以我正在尝试将所有技能声望级别一一循环。这是我目前拥有的:
try {
if (!connect(HOST, DATABASE, USER, PASS)) {
return;
}
String name = player.getUsername();
PreparedStatement stmt1 = prepare("DELETE FROM "+TABLE+" WHERE username=?");
stmt1.setString(1, player.getUsername());
stmt1.execute();
PreparedStatement stmt2 = prepare(generateQuery());
stmt2.setString(1, player.getUsername());
stmt2.setInt(2, player.getRights());
stmt2.setInt(3, 0); // game mode number
stmt2.setInt(4, player.getSkills().getTotalLevel(player)); // total level
stmt2.setLong(5, player.getSkills().getTotalXp());
for (int i = 0; i < 25; i++)
stmt2.setInt(6 + i, (int)player.getSkills().getXp()[i]);
for (int ii = 0; ii < 25; ii++) //this is what i added and wont work
stmt2.setInt(7 + ii, player.prestigeManager.getTotalTimesSkillPrestiged(ii));
stmt2.execute();
destroy();
} catch (Exception e) {
e.printStackTrace();
}
}
这是查询生成器:
public static String generateQuery() {
StringBuilder sb = new StringBuilder();
sb.append("INSERT INTO "+TABLE+" (");
sb.append("username, ");
sb.append("rights, ");
sb.append("mode, ");
sb.append("total_level, ");
sb.append("overall_xp, ");
sb.append("attack_xp, ");
sb.append("defence_xp, ");
sb.append("strength_xp, ");
sb.append("constitution_xp, ");
sb.append("ranged_xp, ");
sb.append("prayer_xp, ");
sb.append("magic_xp, ");
sb.append("cooking_xp, ");
sb.append("woodcutting_xp, ");
sb.append("fletching_xp, ");
sb.append("fishing_xp, ");
sb.append("firemaking_xp, ");
sb.append("crafting_xp, ");
sb.append("smithing_xp, ");
sb.append("mining_xp, ");
sb.append("herblore_xp, ");
sb.append("agility_xp, ");
sb.append("thieving_xp, ");
sb.append("slayer_xp, ");
sb.append("farming_xp, ");
sb.append("runecrafting_xp, ");
sb.append("hunter_xp, ");
sb.append("construction_xp, ");
sb.append("summoning_xp, ");
sb.append("dungeoneering_xp) ");
sb.append("VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)");
sb.append("overall_prestige, ");
sb.append("attack_prestige, ");
sb.append("defence_prestige, ");
sb.append("strength_prestige, ");
sb.append("constitution_prestige, ");
sb.append("ranged_prestige, ");
sb.append("prayer_prestige, ");
sb.append("magic_prestige, ");
sb.append("cooking_prestige, ");
sb.append("woodcutting_prestige, ");
sb.append("fletching_prestige, ");
sb.append("fishing_prestige, ");
sb.append("firemaking_prestige, ");
sb.append("crafting_prestige, ");
sb.append("smithing_prestige, ");
sb.append("mining_prestige, ");
sb.append("herblore_prestige, ");
sb.append("agility_prestige, ");
sb.append("thieving_prestige, ");
sb.append("slayer_prestige, ");
sb.append("farming_prestige, ");
sb.append("runecrafting_prestige, ");
sb.append("hunter_prestige, ");
sb.append("construction_prestige, ");
sb.append("summoning_prestige, ");
sb.append("dungeoneering_prestige) ");
sb.append("VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)");
return sb.toString();
}
这是错误:
java.sql.SQLException: No value specified for parameter 32
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1073)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:987)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:982)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:927)
at com.mysql.jdbc.PreparedStatement.checkAllParametersSet(PreparedStatement.java:2578)
at com.mysql.jdbc.PreparedStatement.fillSendPacket(PreparedStatement.java:2554)
at com.mysql.jdbc.PreparedStatement.fillSendPacket(PreparedStatement.java:2480)
at com.mysql.jdbc.PreparedStatement.execute(PreparedStatement.java:1298)
at com.RuneDivinity.game.cores.mysql.Highscores.run(Highscores.java:67)
at java.lang.Thread.run(Unknown Source)
最佳答案
你有
sb.append("dungeoneering_xp) ");
必须
sb.append("dungeoneering_xp, ");
sb.append("VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)");
在您的代码中是两次::
仅删除顶部的第一个。
关于使用 JDBC 的 Java MySQL 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60368366/