为什么MySQL无法正确执行?

时间:2014-03-21 00:04:33

标签: java mysql minecraft bukkit

我在Minecraft Spigot(Bukkit)服务器中发生事件时尝试更新表。出于某种原因,我无法弄清楚为什么这不起作用。无论如何,这些领域根本就没有变化。

这是执行工作的代码:

public void processKill(final String killerName, final int killerKS, final String victimName) {
        try {
            Thread thread = new Thread() {
                @Override
                public void run() {
                    try (Connection c = du.makeNewConnection()) {
                       if (du.testWorkingConnection(c)) {
                           int best_killstreak = 0;
                           /* Process killstreak */
                           PreparedStatement killerKSSQL = c.prepareCall("SELECT best_killstreak FROM `player_data` WHERE name=?");
                           killerKSSQL.setString(1, killerName);
                           ResultSet killerKSRS = killerKSSQL.executeQuery();
                           best_killstreak = (killerKSRS.next()) ? killerKSRS.getInt(1) : 0;
                           /* Killer stuff */
                           PreparedStatement killerSQL = c.prepareStatement("UPDATE `player_data` SET kills=kills+1,deaths=deaths,points=points+?,best_killstreak=? WHERE name=?;");
                           killerSQL.setInt(1, config.getInt("points-per-kill"));
                           killerSQL.setInt(2, (best_killstreak < killerKS) ? killerKS : best_killstreak);
                           killerSQL.setString(3, killerName);
                           killerSQL.execute();
                           /* Victim stuff */
                           PreparedStatement victimSQL = c.prepareStatement("UPDATE `player_data` SET kills=kills,deaths=deaths+1,points=points-?,best_killstreak=best_killstreak WHERE name=?;");
                           victimSQL.setInt(1, config.getInt("minus-points-per-death"));
                           victimSQL.setString(2, victimName);
                           victimSQL.execute();
                       }
                    } catch (SQLException e) {
                        e.printStackTrace(System.err);
                        return;
                    }
                }
            };
            thread.start();
            thread.join();
        } catch (InterruptedException e) {
            e.printStackTrace(System.err);
        }
    }

显然,我做了一件非常糟糕的事,但我不知道是什么。通常我可以弄清楚如何在网页开发中做这样的事情,但是这让我撕裂了我的头发。

如果您需要任何额外信息,我很乐意帮忙,请问。就目前而言,任何人都可以看到有关为什么这样做不会有任何重大错误?

感谢。

1 个答案:

答案 0 :(得分:0)

使用executeUpdate代替execute来运行更新查询。虽然执行API文档声明它应该适用于udpates,但它并不是大部分时间。

以下是您需要更改的内容

killerSQL.execute();

killerSQL.executeUpdate();

同样是另一个。

同时提交add close你的结果集,语句和连接。