Java 为什么MySQL不能正确执行?

Java 为什么MySQL不能正确执行?,java,mysql,minecraft,bukkit,Java,Mysql,Minecraft,Bukkit,我试图在Minecraft插口Bukkit服务器中发生事件时更新表。出于某种原因,我就是不明白为什么这行不通。不管怎样,这些字段都不会改变 下面是执行此工作的代码: public void processKill(final String killerName, final int killerKS, final String victimName) { try { Thread thread = new Thread() {

我试图在Minecraft插口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);
        }
    }
显然我做错了什么,但我不知道是什么。通常我可以在web开发中想出这样的方法,但这让我毛骨悚然

如果你需要任何额外的信息,我很乐意帮忙,尽管问。就目前而言,有人能看到关于为什么这不起作用的重大错误吗

谢谢。

使用executeUpdate而不是execute来运行更新查询。尽管ExecuteAPI文档声明它应该适用于UDPATE,但大多数情况下并不适用

以下是您需要更改的内容

另一个也一样


另外,请输入并关闭您的结果集、语句和连接。

您确定您的查询正在运行吗?例如,du.testWorkingConnectionc返回true?autocommit如何?@AdrianPang Yes,返回的结果很好,因为初始行创建查询也使用了不同的方法,并且通过了OK。对不起,什么?谢谢你的回答。我切换了这些,但数据库中没有任何更改。@jdersen还命令添加并关闭您的结果集、语句和连接。好的。我已经采纳了你的建议。我添加了手动提交,发现了一个bug,该bug取消了对查询的调用。非常感谢。我甚至不确定其他东西是否有必要,但这听起来是个不错的做法,所以我会继续使用它们+1d和接受。谢谢大家!@杰德森很高兴这有帮助:-
killerSQL.execute();
killerSQL.executeUpdate();