• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Java Minecraft Plugin - Nie dodaje rekordów do bazy danych

VPS Starter Arubacloud
0 głosów
407 wizyt
pytanie zadane 19 października 2019 w Java przez Nerez Użytkownik (970 p.)
edycja 26 października 2019 przez Nerez

Witam. Piszę plugin dodający UUID i nick gracza po wejściu na serwer do bazy danych, niestety wyskakują błędy wklejone poniżej,  podłączenie do bazy danych działa na 100%.\

MySql connect:

public void mysqlSetup() {
        host = this.getConfig().getString("host");
        port = this.getConfig().getInt("port");
        database = this.getConfig().getString("database");
        username = this.getConfig().getString("username");
        password = this.getConfig().getString("password");
        table = this.getConfig().getString("table");

        try{
            synchronized (this) {
                if(getConnection() != null && !getConnection().isClosed()) {
                    return;
                }
                Class.forName("com.mysql.jdbc.Driver");
                setConnection(DriverManager.getConnection("jdbc:mysql://" + this.host + ":" + this.port + "/" + this.database, this.username, this.password));

                Bukkit.getConsoleSender().sendMessage(ChatColor.RED + "MYSQL CONNECTED");
            }

        }catch (SQLException e) {
            e.printStackTrace();
        }catch (ClassNotFoundException e) {
            e.printStackTrace();
        }

    }

MySql insert:

@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 founded!");

        }catch (SQLException e) {
            e.printStackTrace();
        }
        return false;

 }
    public void createPlayer(final UUID uuid, Player player) {
        try {
            PreparedStatement statement = plugin.getConnection()
                    .prepareStatement("SELECT * FROM " + plugin.table + "WHERE UUID = ?");
            statement.setString(1, uuid.toString());
            ResultSet results = statement.executeQuery();
            results.next();
            if(playerExists(uuid) != true) {
                PreparedStatement insert = plugin.getConnection()
                        .prepareStatement(  "INSERT INTO " + plugin.table + "(UUID, NAME) VALUE (?, ?)");
                insert.setString(1, uuid.toString());
                insert.setString(2, player.getName());
                insert.executeUpdate();

                plugin.getServer().broadcastMessage(ChatColor.GREEN + "PLAYER INSERTED");
            }


        } catch (SQLException e) {
            e.printStackTrace();
        }

Error:

[02:13:52] [Server thread/WARN]: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '= 'e0cba1f3-ddd2-3f8c-95cd-0819f78791b6'' at line 1
[02:13:52] [Server thread/WARN]:        at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
[02:13:52] [Server thread/WARN]:        at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
[02:13:52] [Server thread/WARN]:        at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
[02:13:52] [Server thread/WARN]:        at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:490)
[02:13:52] [Server thread/WARN]:        at com.mysql.jdbc.Util.handleNewInstance(Util.java:425)
[02:13:52] [Server thread/WARN]:        at com.mysql.jdbc.Util.getInstance(Util.java:408)
[02:13:52] [Server thread/WARN]:        at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:944)
[02:13:52] [Server thread/WARN]:        at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3978)
[02:13:52] [Server thread/WARN]:        at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3914)
[02:13:52] [Server thread/WARN]:        at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2530)
[02:13:52] [Server thread/WARN]:        at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2683)
[02:13:52] [Server thread/WARN]:        at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2495)
[02:13:52] [Server thread/WARN]:        at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:1903)
[02:13:52] [Server thread/WARN]:        at com.mysql.jdbc.PreparedStatement.executeQuery(PreparedStatement.java:2011)
[02:13:52] [Server thread/WARN]:        at nerez.aplikacja.MySqlInsert.createPlayer(MySqlInsert.java:50)
[02:13:52] [Server thread/WARN]:        at nerez.aplikacja.MySqlInsert.onJoin(MySqlInsert.java:22)
[02:13:52] [Server thread/WARN]:        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
[02:13:52] [Server thread/WARN]:        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
[02:13:52] [Server thread/WARN]:        at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
[02:13:52] [Server thread/WARN]:        at java.base/java.lang.reflect.Method.invoke(Method.java:566)
[02:13:52] [Server thread/WARN]:        at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:316)
[02:13:52] [Server thread/WARN]:        at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.java:70)
[02:13:52] [Server thread/WARN]:        at org.bukkit.plugin.SimplePluginManager.fireEvent(SimplePluginManager.java:529)
[02:13:52] [Server thread/WARN]:        at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.java:514)
[02:13:52] [Server thread/WARN]:        at net.minecraft.server.v1_14_R1.PlayerList.a(PlayerList.java:173)
[02:13:52] [Server thread/WARN]:        at net.minecraft.server.v1_14_R1.LoginListener.c(LoginListener.java:154)
[02:13:52] [Server thread/WARN]:        at net.minecraft.server.v1_14_R1.LoginListener.tick(LoginListener.java:53)
[02:13:52] [Server thread/WARN]:        at net.minecraft.server.v1_14_R1.NetworkManager.a(NetworkManager.java:220)
[02:13:52] [Server thread/WARN]:        at net.minecraft.server.v1_14_R1.ServerConnection.c(ServerConnection.java:119)
[02:13:52] [Server thread/WARN]:        at net.minecraft.server.v1_14_R1.MinecraftServer.b(MinecraftServer.java:1092)
[02:13:52] [Server thread/WARN]:        at net.minecraft.server.v1_14_R1.DedicatedServer.b(DedicatedServer.java:396)
[02:13:52] [Server thread/WARN]:        at net.minecraft.server.v1_14_R1.MinecraftServer.a(MinecraftServer.java:971)
[02:13:52] [Server thread/WARN]:        at net.minecraft.server.v1_14_R1.MinecraftServer.run(MinecraftServer.java:816)
[02:13:52] [Server thread/WARN]:        at java.base/java.lang.Thread.run(Thread.java:834)

CreatePlayer i PlayerExist:

package nerez.aplikacja;

import org.bukkit.ChatColor;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerJoinEvent;

import javax.xml.transform.Result;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.UUID;

public class MySqlInsert implements Listener {

    Aplikacja plugin = Aplikacja.getPlugin(Aplikacja.class);

    @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 founded!");

        }catch (SQLException e) {
            e.printStackTrace();
        }
        return false;

 }
    public void createPlayer(final UUID uuid, Player player) {
        try {
            PreparedStatement statement = plugin.getConnection()
                    .prepareStatement("SELECT * FROM " + plugin.table + "WHERE UUID = ?");
            statement.setString(1, uuid.toString());
            ResultSet results = statement.executeQuery();
            results.next();
            if(playerExists(uuid) != true) {
                PreparedStatement insert = plugin.getConnection()
                        .prepareStatement(  "INSERT INTO " + plugin.table + "(UUID, NAME) VALUE (?, ?)");
                insert.setString(1, uuid.toString());
                insert.setString(2, player.getName());
                insert.executeUpdate();

                plugin.getServer().broadcastMessage(ChatColor.GREEN + "PLAYER INSERTED");
            }


        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}

 

2 odpowiedzi

0 głosów
odpowiedź 19 października 2019 przez DanielD Użytkownik (820 p.)

Jak dla mnie problem tkwi w połączeniu
 

Caused by: java.io.EOFException: Can not read response from server. Expected to read 4 bytes, read 0 bytes before connection was unexpectedly lost.

spróbuj dodać do konfiguracji bazy automatyczne połączenie

autoReconnect=true
komentarz 19 października 2019 przez Nerez Użytkownik (970 p.)
W którym miejscu mam to dodać? Sorry za banalne pytania, ale jestem totalnym laikiem niestety w tych tematach.
komentarz 19 października 2019 przez DanielD Użytkownik (820 p.)

przykładowe połączenie do bazy

jdbc:mysql://mywebapp:3306/myDB?autoReconnect=true&characterEncoding=utf-8&useUnicode=true" username="user"

 

komentarz 19 października 2019 przez Nerez Użytkownik (970 p.)
Nie pomaga niestety nic, albo ja zle robie.
komentarz 19 października 2019 przez Nerez Użytkownik (970 p.)

Teraz mam taki błąd: 

 com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '= 'e0cba1f3-ddd2-3f8c-95cd-0819f78791b6'' at line 1

 

0 głosów
odpowiedź 22 października 2019 przez bartzdev Użytkownik (780 p.)
Podałeś tylko skrawek kodu, z którego nie da się nic wywnioskować. Może byś podał chociaż createPlayer i wszystkie funkcje w nim użyte? Czytanie stacktrace nie boli.
komentarz 26 października 2019 przez bartzdev Użytkownik (780 p.)
Czy dodałeś ` do nazw pól?
komentarz 27 października 2019 przez Nerez Użytkownik (970 p.)
Do nazw pól?
komentarz 27 października 2019 przez bartzdev Użytkownik (780 p.)
”SELECT * FROM `” + plugin.table + ”` WHERE `UUUD` = ?;”
komentarz 27 października 2019 przez Nerez Użytkownik (970 p.)

Bardzo dziękuję :) Gracza dodaje, ale jeszcze nie odczytuję. Aktualnie zrobilem cos takiego:

.prepareStatement(  "INSERT INTO `" + plugin.table + "` (UUID, NAME) VALUES (?, ?)");
komentarz 27 października 2019 przez bartzdev Użytkownik (780 p.)
zmień na: (`UUID`, `NAME`)

Podobne pytania

0 głosów
2 odpowiedzi 563 wizyt
pytanie zadane 29 lipca 2019 w Java przez Nerez Użytkownik (970 p.)
0 głosów
0 odpowiedzi 106 wizyt
0 głosów
1 odpowiedź 725 wizyt
pytanie zadane 5 grudnia 2018 w Java przez Bartosz Paterek Początkujący (410 p.)

92,841 zapytań

141,782 odpowiedzi

320,857 komentarzy

62,173 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Wprowadzenie do ITsec, tom 2

Można już zamawiać tom 2 książki "Wprowadzenie do bezpieczeństwa IT" - będzie to około 650 stron wiedzy o ITsec (17 rozdziałów, 14 autorów, kolorowy druk).

Planowana premiera: 30.09.2024, zaś planowana wysyłka nastąpi w drugim tygodniu października 2024.

Warto preorderować, tym bardziej, iż mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy dodatkowe 15% zniżki! Dziękujemy zaprzyjaźnionej ekipie Sekuraka za kod dla naszej Społeczności!

...