Java MySQL Запрос с использованием JDBC - PullRequest
0 голосов
/ 24 февраля 2020

Итак, я работаю над своим проектом и пытаюсь сделать рекорд для игроков моего проекта. В настоящее время рекорды работают, чтобы отобразить каждый навык и их объединенный уровень, опыт и уровень для навыка. На данный момент я пытаюсь показать престиж каждого навыка. Поэтому я пытаюсь перебрать все уровни престижа навыков 1 на 1. Вот что у меня сейчас:

        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)

1 Ответ

0 голосов
/ 24 февраля 2020

У вас есть

   sb.append("dungeoneering_xp) ");

должно быть

sb.append("dungeoneering_xp, ");

sb.append ("VALUES (?,?,?,?, ?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?, ?) ");

дважды в вашем коде ::

Просто удалите первое сверху.

...