java - 我无法让我的插件在 MySQL 数据库中存储值

标签 java mysql minecraft

我正在编写一个插件,它将在 MySQL 中存储连接到播放器的值,以供另一台服务器(Bungee cord)使用,但仍在测试中,因此我尝试保存播放器的 UUID、名称和 DisplayName。

我遵循了 YouTube 教程,因为这是我第一次涉足黑暗艺术。我浏览了视频,没有发现任何东西可以将我的代码与他的代码分开。我什至让代码在数据库中创建表,因为我不确定 UUID 和其他变量使用哪些变量

@EventHandler
public void onJoin(PlayerJoinEvent event) {
    Player player = event.getPlayer();
    createPlayer(player.getUniqueId(), player);
}

public boolean playerExists(UUID uuid) {
    try {
        PreparedStatement statement = plugin.getConnection().prepareStatement("SELECT * FROM " + plugin.table + "WHERE UUID=?");
        statement.setString(1, uuid.toString());
        ResultSet results = statement.executeQuery();
        if(results.next()){
            plugin.getServer().broadcastMessage(ChatColor.YELLOW + "Player found");
            return true;
        }
        plugin.getServer().broadcastMessage(ChatColor.RED + "Player NOT found");
    } catch (SQLException e){
        e.printStackTrace();
    }
    return false;
}
public void createPlayer(final UUID uuid, Player player) {
    try {
        Statement tableCreation = plugin.getConnection().createStatement();
        tableCreation.executeUpdate("CREATE TABLE IF NOT EXISTS " + plugin.table + "(UUID varchar(36), PLAYER VARCHAR(16), DISPLAY_NAME VARCHAR(16))");
        PreparedStatement statement = plugin.getConnection()
                .prepareStatement("SELECT * FROM " + plugin.table + "WHERE UUID=?");
        statement.setString(1, uuid.toString());
        ResultSet results = statement.executeQuery(); // error here
        plugin.getLogger().info("Thinking...");
        results.next();
        if(!playerExists(uuid)){
            plugin.getLogger().info("Player dose not exist!");
            PreparedStatement insert = plugin.getConnection()
                    .prepareStatement("INSERT INTO " + plugin.table + "(UUID,NAME,DISPLAY_NAME) VALUE (?,?,?)");
            insert.setString(1, uuid.toString());
            insert.setString(2, player.getName());
            insert.setString(3, player.getDisplayName());
            plugin.getLogger().info("Adding Player...");
            insert.executeUpdate();
            plugin.getLogger().info("Player Added");
            plugin.getServer().broadcastMessage(ChatColor.GREEN + "Player Inserted");
        }
    } catch (SQLException e) {
        e.printStackTrace();
    }
}

我知道大量代码抱歉,我在此处标记了代码返回错误的位置//error

服务器日志中的错误: https://pastebin.com/3uQHmjqT

我想要的是代码完成时不出现错误,并将玩家添加到我的数据库表中

对于那些想观看视频的人,请点击这里:

https://www.youtube.com/watch?v=2HQ385ssa3Y - 第 1 部分设置连接

https://www.youtube.com/watch?v=F8hoBWnrqOU - 第 2 部分保存值(还将连接值放入配置中)

最佳答案

我的问题的解决方案是直接从教程 github 获取代码。 https://github.com/DGIProject/UUIDSql/blob/master/src/main/java/fr/dgiproject/UUIDSql.java 我一定是在某个地方犯了一个错误,但我找不到它。但这是我的解决方案。

编辑1:我查看了 github 和我的,发现了一个差异,测试时给出了 MariaDB 服务器版本,以便在附近使用正确的语法... 并且缺少“”(空格)在“plugin.table”和“”WHERE”之间,它应该是“plugin.table +” WHERE”。现在我很确定我测试过,但我想没有......

关于java - 我无法让我的插件在 MySQL 数据库中存储值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58223959/

相关文章:

java - jsp 页面和 Controller 中的方法之间的请求映射不起作用

java - Android 登录并将名字和名字粘贴到用户区域

java - 动态更改 BungeeCord 服务器配置

java - Minecraft 模组 - 如何在服务器端使用 setBlock?

php - 将另一个表中的项目数组连接到第一个表

java - 返回扩展类

java - 获取昨天 - 日期类型的方法 getDate() 已弃用

java - 在资源路径中找不到 native 库

java - 在线程 "main"java.lang.ArrayIndexOutOfBoundsException : 2 中获取异常

php - 选择正在传递的项目值而不是文本值到mysql数据库实时成本计算