Обновление подготовленного оператора Java SQL не работает

У меня проблема, что я просто не могу запустить следующий код. Я пробовал и изменил их все, но я всегда получаю сообщение об ошибке, может быть, вы знаете, где ошибка?

public class TestCommand implements ServerCommand{

    @Override
    public void performcommand(SlashCommandInteractionEvent event, Member m, MessageChannelUnion channel,
            VoiceChannel ec, VoiceChannel pub, TextChannel log, Guild guild) {

        Connection connection = null;
        PreparedStatement preparedStatement = null;
                
        String sql = ("UPDATE member_ships SET?= ? WHERE UUID= ?"); 
        
        try {
            connection = MySQL.getConnection();
            preparedStatement = connection.prepareStatement(sql);
            preparedStatement.setString(1,"Cyclone");
            preparedStatement.setInt(2,9);
            preparedStatement.setLong(3,316931131188576123l);
            preparedStatement.executeUpdate();
        }   catch (SQLException e) {
            e.printStackTrace();
        } finally {
            MySQL.closePreparedStatement(preparedStatement);
            MySQL.closeConnection(connection);
        }
    }
}

Класс MySQL

public class MySQL {

    public static Connection getConnection() throws SQLException {
        Connection connection = DriverManager.getConnection("jdbc:mysql://*****","***","****");
        connection.setAutoCommit(true);
        System.out.println("Database connecion successful"); //TODO Remove 
        return connection;
    }

И вот трассировка стека ошибки:

java.sql.SQLSyntaxErrorException: 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 ''Cyclone'= 9 WHERE UUID= 316931131188576123' at line 1
        at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:120)
        at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:122)
        at com.mysql.cj.jdbc.ClientPreparedStatement.executeInternal(ClientPreparedStatement.java:916)
        at com.mysql.cj.jdbc.ClientPreparedStatement.executeUpdateInternal(ClientPreparedStatement.java:1061)
        at com.mysql.cj.jdbc.ClientPreparedStatement.executeUpdateInternal(ClientPreparedStatement.java:1009)
        at com.mysql.cj.jdbc.ClientPreparedStatement.executeLargeUpdate(ClientPreparedStatement.java:1320)
        at com.mysql.cj.jdbc.ClientPreparedStatement.executeUpdate(ClientPreparedStatement.java:994)
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
0
60
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы не можете привязывать имена объектов (в данном случае имя столбца), только значения.

Сказав это, поскольку все значения здесь кажутся жестко закодированными, вам действительно не нужен PreparedStamtement, и вы можете просто выполнить оператор напрямую:

con.executeUpdate("UPDATE member_ships SET Cyclone = 9 WHERE UUID = 316931131188576123l"); 

Ааа большое спасибо, я этого не знал, теперь я сделал это по-другому, и это работает. В реальном проекте переменные не фиксируются, я их просто убрал, чтобы проще было найти ошибку.

Azalen 16.12.2022 22:30

Другие вопросы по теме