使用 JDBC 的 Java MySQL 查询

标签 java php mysql jdbc

所以我一直在做我的一个项目,我正在努力为我的项目的玩家取得高分。目前,高分可以显示每项技能及其综合等级、经验值和每项技能的等级。我现在想做的就是让它显示出每项技能的声望水平。所以我正在尝试将所有技能声望级别一一循环。这是我目前拥有的:

        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/

相关文章:

java - Pydev 中的自动补全 - Eclipse for wxpython

php - MySQL 和 date() 查询

mysql replication incompatible statements问题

c# - 求调用存储过程的合法例子 C# : MYSQL

java - 尝试访问android项目资源时出现"Cannot Find Symbol"错误

Java 将变量 String[] 与 String 混合在一个字符串数组中

php - 如何序列化 svg 以便它可以放入 cookie

javascript - 在 Laravel 中使用 javascript 将日期从数据库加载到表单

mysql - 在mysql中更改一个单元格的数据

java - 从 Excel 数据源导出 Excel 报告 JasperReport