Помогите удалить все строки из бд

  • Автор темы Автор темы reZero
  • Дата начала Дата начала

reZero

Активный участник
Пользователь
Баллы
76
Сразу извиняюсь за, возможно, очень глупый вопрос, но погуглив, а скорее всего я плохо искал, я ничего толкового не нашел...
Допустим, у меня есть таблица с полями( name | x | y | z | nameTwo | nameThree )
Какой командой можно удалить все эти поля, если известен name ?
Возможно я не правильно выразился, но я надеюсь, что вы меня поймете
 
Не совсем то, что мне надо...

Вот у меня таблица
upload_2018-11-27_22-45-58.png
Мне нужно, чтобы при вводе команды с аргументом из столбца name, удалялись все значения для этого name (name, x, y, z, yaw, pitch), то есть, если проще, то просто удалить одну строчку из списка.
Приведу пример: Игрок вводит команду /remove jail2, из таблицы должен удалится этот jail2 вместе с другими полями (x, y, z, yaw, pitch)
 
Мне нужно, чтобы при вводе команды с аргументом из столбца name, удалялись все значения для этого name (name, x, y, z, yaw, pitch), то есть, если проще, то просто удалить одну строчку из списка.
Приведу пример: Игрок вводит команду /remove jail2, из таблицы должен удалится этот jail2 вместе с другими полями (x, y, z, yaw, pitch)
Ну так это и происходит в этом запросе.
 
Чет ваще туплю, никак не врублюсь
PHP:
PreparedStatement delete = sql.getConnection().prepareStatement("DELETE FROM JailInfo WHERE name="+name);
            delete.executeUpdate();  //name - это аргумент команды
PHP:
[23:54:13] [Server thread/WARN]: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column 'jail' in 'where clause'
[23:54:13] [Server thread/WARN]:     at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
[23:54:13] [Server thread/WARN]:     at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
[23:54:13] [Server thread/WARN]:     at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
[23:54:13] [Server thread/WARN]:     at java.lang.reflect.Constructor.newInstance(Unknown Source)
[23:54:13] [Server thread/WARN]:     at com.mysql.jdbc.Util.handleNewInstance(Util.java:425)
[23:54:13] [Server thread/WARN]:     at com.mysql.jdbc.Util.getInstance(Util.java:408)
[23:54:13] [Server thread/WARN]:     at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:943)
[23:54:13] [Server thread/WARN]:     at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3970)
[23:54:13] [Server thread/WARN]:     at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3906)
[23:54:13] [Server thread/WARN]:     at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2524)
[23:54:13] [Server thread/WARN]:     at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2677)
[23:54:13] [Server thread/WARN]:     at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2549)
[23:54:13] [Server thread/WARN]:     at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:1861)
[23:54:13] [Server thread/WARN]:     at com.mysql.jdbc.PreparedStatement.executeUpdateInternal(PreparedStatement.java:2073)
[23:54:13] [Server thread/WARN]:     at com.mysql.jdbc.PreparedStatement.executeUpdateInternal(PreparedStatement.java:2009)
[23:54:13] [Server thread/WARN]:     at com.mysql.jdbc.PreparedStatement.executeLargeUpdate(PreparedStatement.java:5098)
[23:54:13] [Server thread/WARN]:     at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:1994)
[23:54:13] [Server thread/WARN]:     at ru.ReZero.JS.Utils.JailManager.removeJail(JailManager.java:75)
[23:54:13] [Server thread/WARN]:     at ru.ReZero.JS.Commands.RemovePrison.onCommand(RemovePrison.java:43)
[23:54:13] [Server thread/WARN]:     at org.bukkit.command.PluginCommand.execute(PluginCommand.java:44)
[23:54:13] [Server thread/WARN]:     at org.bukkit.command.SimpleCommandMap.dispatch(SimpleCommandMap.java:141)
[23:54:13] [Server thread/WARN]:     at org.bukkit.craftbukkit.v1_11_R1.CraftServer.dispatchCommand(CraftServer.java:650)
[23:54:13] [Server thread/WARN]:     at net.minecraft.server.v1_11_R1.PlayerConnection.handleCommand(PlayerConnection.java:1354)
[23:54:13] [Server thread/WARN]:     at net.minecraft.server.v1_11_R1.PlayerConnection.a(PlayerConnection.java:1189)
[23:54:13] [Server thread/WARN]:     at net.minecraft.server.v1_11_R1.PacketPlayInChat.a(PacketPlayInChat.java:45)
[23:54:13] [Server thread/WARN]:     at net.minecraft.server.v1_11_R1.PacketPlayInChat.a(PacketPlayInChat.java:1)
[23:54:13] [Server thread/WARN]:     at net.minecraft.server.v1_11_R1.PlayerConnectionUtils$1.run(SourceFile:13)
[23:54:13] [Server thread/WARN]:     at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source)
[23:54:13] [Server thread/WARN]:     at java.util.concurrent.FutureTask.run(Unknown Source)
[23:54:13] [Server thread/WARN]:     at net.minecraft.server.v1_11_R1.SystemUtils.a(SourceFile:46)
[23:54:13] [Server thread/WARN]:     at net.minecraft.server.v1_11_R1.MinecraftServer.D(MinecraftServer.java:747)
[23:54:13] [Server thread/WARN]:     at net.minecraft.server.v1_11_R1.DedicatedServer.D(DedicatedServer.java:399)
[23:54:13] [Server thread/WARN]:     at net.minecraft.server.v1_11_R1.MinecraftServer.C(MinecraftServer.java:678)
[23:54:13] [Server thread/WARN]:     at net.minecraft.server.v1_11_R1.MinecraftServer.run(MinecraftServer.java:576)
[23:54:13] [Server thread/WARN]:     at java.lang.Thread.run(Unknown Source)
upload_2018-11-27_23-57-28.png
 
Чет ваще туплю, никак не врублюсь
PHP:
PreparedStatement delete = sql.getConnection().prepareStatement("DELETE FROM JailInfo WHERE name="+name);
            delete.executeUpdate();  //name - это аргумент команды
PHP:
[23:54:13] [Server thread/WARN]: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column 'jail' in 'where clause'
[23:54:13] [Server thread/WARN]:     at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
[23:54:13] [Server thread/WARN]:     at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
[23:54:13] [Server thread/WARN]:     at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
[23:54:13] [Server thread/WARN]:     at java.lang.reflect.Constructor.newInstance(Unknown Source)
[23:54:13] [Server thread/WARN]:     at com.mysql.jdbc.Util.handleNewInstance(Util.java:425)
[23:54:13] [Server thread/WARN]:     at com.mysql.jdbc.Util.getInstance(Util.java:408)
[23:54:13] [Server thread/WARN]:     at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:943)
[23:54:13] [Server thread/WARN]:     at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3970)
[23:54:13] [Server thread/WARN]:     at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3906)
[23:54:13] [Server thread/WARN]:     at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2524)
[23:54:13] [Server thread/WARN]:     at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2677)
[23:54:13] [Server thread/WARN]:     at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2549)
[23:54:13] [Server thread/WARN]:     at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:1861)
[23:54:13] [Server thread/WARN]:     at com.mysql.jdbc.PreparedStatement.executeUpdateInternal(PreparedStatement.java:2073)
[23:54:13] [Server thread/WARN]:     at com.mysql.jdbc.PreparedStatement.executeUpdateInternal(PreparedStatement.java:2009)
[23:54:13] [Server thread/WARN]:     at com.mysql.jdbc.PreparedStatement.executeLargeUpdate(PreparedStatement.java:5098)
[23:54:13] [Server thread/WARN]:     at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:1994)
[23:54:13] [Server thread/WARN]:     at ru.ReZero.JS.Utils.JailManager.removeJail(JailManager.java:75)
[23:54:13] [Server thread/WARN]:     at ru.ReZero.JS.Commands.RemovePrison.onCommand(RemovePrison.java:43)
[23:54:13] [Server thread/WARN]:     at org.bukkit.command.PluginCommand.execute(PluginCommand.java:44)
[23:54:13] [Server thread/WARN]:     at org.bukkit.command.SimpleCommandMap.dispatch(SimpleCommandMap.java:141)
[23:54:13] [Server thread/WARN]:     at org.bukkit.craftbukkit.v1_11_R1.CraftServer.dispatchCommand(CraftServer.java:650)
[23:54:13] [Server thread/WARN]:     at net.minecraft.server.v1_11_R1.PlayerConnection.handleCommand(PlayerConnection.java:1354)
[23:54:13] [Server thread/WARN]:     at net.minecraft.server.v1_11_R1.PlayerConnection.a(PlayerConnection.java:1189)
[23:54:13] [Server thread/WARN]:     at net.minecraft.server.v1_11_R1.PacketPlayInChat.a(PacketPlayInChat.java:45)
[23:54:13] [Server thread/WARN]:     at net.minecraft.server.v1_11_R1.PacketPlayInChat.a(PacketPlayInChat.java:1)
[23:54:13] [Server thread/WARN]:     at net.minecraft.server.v1_11_R1.PlayerConnectionUtils$1.run(SourceFile:13)
[23:54:13] [Server thread/WARN]:     at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source)
[23:54:13] [Server thread/WARN]:     at java.util.concurrent.FutureTask.run(Unknown Source)
[23:54:13] [Server thread/WARN]:     at net.minecraft.server.v1_11_R1.SystemUtils.a(SourceFile:46)
[23:54:13] [Server thread/WARN]:     at net.minecraft.server.v1_11_R1.MinecraftServer.D(MinecraftServer.java:747)
[23:54:13] [Server thread/WARN]:     at net.minecraft.server.v1_11_R1.DedicatedServer.D(DedicatedServer.java:399)
[23:54:13] [Server thread/WARN]:     at net.minecraft.server.v1_11_R1.MinecraftServer.C(MinecraftServer.java:678)
[23:54:13] [Server thread/WARN]:     at net.minecraft.server.v1_11_R1.MinecraftServer.run(MinecraftServer.java:576)
[23:54:13] [Server thread/WARN]:     at java.lang.Thread.run(Unknown Source)
А для чего тут используется препаред стейтмент
 
Для таких целей придумали id.
PHP:
//Создаем таблицу и называем её
CREATE TABLE `MyTestName` (
    //1 столбик идёт как id. Мы сюда ничего не пишем
    `id`    int PRIMARY KEY AUTOINCREMENT,
    //2 столбик jail. В нём будет хранится название тюрьмы, а так же если запрос имеет пустое обращение, то он будет сброшен, ибо стоит параметр NOT NULL
    `jail`    varchar(255) NOT NULL
);
PHP:
//Вставляем данные в нашу таблицу. jail - столбик, test - значение.
INSERT INTO `MyTestName` (jail) values ('test');
upload_2018-11-28_5-31-32.png
PHP:
//Удаляем данные с таблицы (Вместо 1 подставляешь свое значение)
DELETE from `MyTestName` where `id`='1';
p.s Если проект не использует для Jail 2 и более серверов, а так же там нет синхронизированной информации, я настоятельно рекомендую использовать SQLite.
 
Последнее редактирование:
Чет ваще туплю, никак не врублюсь
PHP:
PreparedStatement delete = sql.getConnection().prepareStatement("DELETE FROM JailInfo WHERE name="+name);
            delete.executeUpdate();  //name - это аргумент команды
у тебя кавычек не хватает вокруг строки
Код:
PreparedStatement delete = sql.getConnection().prepareStatement("DELETE FROM JailInfo WHERE name='" + name + "'");
delete.executeUpdate();
либо можно сделать еще лучше
Код:
PreparedStatement delete = sql.getConnection().prepareStatement("DELETE FROM JailInfo WHERE name=?");
delete.setString(1, name);
delete.executeUpdate();
а остальных дурачков не слушай, они походу на своей волне
 
у тебя кавычек не хватает вокруг строки
Код:
PreparedStatement delete = sql.getConnection().prepareStatement("DELETE FROM JailInfo WHERE name='" + name + "'");
delete.executeUpdate();
либо можно сделать еще лучше
Код:
PreparedStatement delete = sql.getConnection().prepareStatement("DELETE FROM JailInfo WHERE name=?");
delete.setString(1, name);
delete.executeUpdate();
а остальных дурачков не слушай, они походу на своей волне
+++ полностью с тобой согласен! Куда лучше юзать удаление по имени, чем по ID.
 
Куда лучше юзать удаление по имени, чем по ID
то есть когда вводят /remove jail2
ты предлагаешь сначала селекнтуть его id? а потом удалить по id?
или хранить маппинг id на name? предлагаешь, так предлагай до конца. а то советчиков много, а толку мало
Сказал тот, кто советует дропать запись целиком 😁.
наверно потому что топикстартер именно этого и хочет? а не ваши все советы как всё непонятно зачем переписать
 
то есть когда вводят /remove jail2
ты предлагаешь сначала селекнтуть его id? а потом удалить по id?
или хранить маппинг id на name? предлагаешь, так предлагай до конца. а то советчиков много, а толку мало
Я предлагаю сделать систему вывода по команде /jail list, а потом определив id для удаления, удалить его из базы данных командой к примеру /jail delete 2 (Где 2 это наш id)
 
Всем спасибо, реально просто забыл переменную кавычками обнести =(
Также учту ваши предложения)
Есть еще у меня один вопрос, спрошу тут чтоб новую тему не плодить.
Вот у меня есть класс с подключением к бд
PHP:
    private Connection connection;
    private String host, database, username, password;
    private int port;
    public ConnectSQL(String host, String database, String username, String password, int port)
    {
        this.host = host;
        this.database = database;
        this.username = username;
        this.password = password;
        this.port = port;
        setupMySQL();
    }
  
    public void setupMySQL()
    {
        try
        {
            synchronized(Main.getInstance())
            {
                if(getConnection() != null && !getConnection().isClosed())
                {
                    return;
                }
                Class.forName("com.mysql.jdbc.Driver");
                setConnection((Connection) DriverManager.getConnection("jdbc:mysql://"+this.host+":"+this.port+"/"+this.database, this.username, this.password));
                Bukkit.getConsoleSender().sendMessage(ChatColor.GREEN + "MYSQL CONNECTED SUCCESSFUL");
            }
        }
        catch(SQLException e)
        {
            e.printStackTrace();
        }
        catch(ClassNotFoundException e)
        {
            e.printStackTrace();
        }
    }
  
    public Connection getConnection()
    {
        return connection;
    }
  
    public void setConnection(Connection connection)
    {
        this.connection = connection;
    }
Когда плагин включается, я подключаюсь таким способом
PHP:
private ConnectSQL sql = new ConnectSQL(Main.getInstance().getConfig().getString("MySQL.host"), Main.getInstance().getConfig().getString("MySQL.database"), Main.getInstance().getConfig().getString("MySQL.username"), Main.getInstance().getConfig().getString("MySQL.password"), Main.getInstance().getConfig().getInt("MySQL.port"));
sql.setupMySQL();
Но при взаимодействии с бд (например мне нужно было записать в бд инфу) мне sql.getConnection() выдавал npe, то есть, как я понял, не было соединения с бд..
Теперь при обращении к бд у меня всегда запускается метод setupMySQL() из первого спойлера и все вроде работает нормально...
В чем суть вопроса.. Я делаю что-то не так? Так и должно быть? Или мне нужно каким-то образом поддерживать подключение к бд?
 
Последнее редактирование:
Ты метод то свой не запросил. У тебя только instance класса есть, а в нём переменная connection так и осталась null, ибо дефайнит у тебя её метод, который ты благополучно забыл запросить

Код:
private ConnectSQL sql = new ConnectSQL(Main.getInstance().getConfig().getString("MySQL.host"), Main.getInstance().getConfig().getString("MySQL.database"), Main.getInstance().getConfig().getString("MySQL.username"), Main.getInstance().getConfig().getString("MySQL.password"), Main.getInstance().getConfig().getInt("MySQL.port"));
sql.setupMySQL();
 
Ты метод то свой не запросил. У тебя только instance класса есть, а в нём переменная connection так и осталась null, ибо дефайнит у тебя её метод, который ты благополучно забыл запросить

Код:
private ConnectSQL sql = new ConnectSQL(Main.getInstance().getConfig().getString("MySQL.host"), Main.getInstance().getConfig().getString("MySQL.database"), Main.getInstance().getConfig().getString("MySQL.username"), Main.getInstance().getConfig().getString("MySQL.password"), Main.getInstance().getConfig().getInt("MySQL.port"));
sql.setupMySQL();
Я просто не дописал выше. Я при включении получаю sql и через него вызываю setupMySQL()
 
Я просто не дописал выше. Я при включении получаю sql и через него вызываю setupMySQL()
Код:
public class MySQL implements Database {
    private Connection conn;

    public MySQL(String url, String dbName, String user, String pass) {
        try {
            Class.forName("com.mysql.jdbc.Driver");
            conn = DriverManager.getConnection(
                    "jdbc:mysql://" + url + "/" + dbName + "?useUnicode=true&characterEncoding=utf8&autoReconnect=true",
                    user, pass);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
 
Код:
public class MySQL implements Database {
    private Connection conn;

    public MySQL(String url, String dbName, String user, String pass) {
        try {
            Class.forName("com.mysql.jdbc.Driver");
            conn = DriverManager.getConnection(
                    "jdbc:mysql://" + url + "/" + dbName + "?useUnicode=true&characterEncoding=utf8&autoReconnect=true",
                    user, pass);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
И что тут отличается от моего метода, кроме того что ты конектишься в конструкторе?
Все равно у меня при каждом запросе заново конектиться к mysql
 
И что тут отличается от моего метода, кроме того что ты конектишься в конструкторе?
Все равно у меня при каждом запросе заново конектиться к mysql
Ого, умный наверно? При каждом запросе заново создавать коннект)
 
Ого, умный наверно? При каждом запросе заново создавать коннект)
Так я и спрашиваю, плохо это или нет. Я сразу начал подозрнвать что что-то делаю не так, поэтому и спрашиваю здесь. Как правильно делать?
 
Назад
Верх