Обновление столбца не работает в mariadb из java

Я столкнулся с проблемой обновления значения столбца по набору результатов в mariadb из java-кода. Похоже, что метод resultset.updateString() не поддерживается в JDBC-коннекторе mariadb. Может ли кто-нибудь прислать мне альтернативный способ выполнения этого процесса.

Версия коннектора MariaDB: mariadb-java-client-1.5.8.jar, версия MariaDB: mariadb-10.1.20-winx64

Ниже приведен фрагмент кода: Фрагмент кода Java

Возникло следующее исключение: трассировка исключения


person Rakesh    schedule 27.02.2017    source источник
comment
Обновление какой строки? Все ряды? Какой-то конкретный ряд? Обновление каких столбцов?   -  person Rick James    schedule 28.02.2017
comment
Пожалуйста, опубликуйте определение таблицы - какой тип столбца вы обновляете с помощью updateString()? Лучше опубликовать фрагмент кода и трассировку исключения в виде текста (а не изображения), это поможет большому G найти этот пост.   -  person chrisinmtown    schedule 21.03.2017


Ответы (1)


Вы можете использовать Statement.executeUpdate() вместо этого. Конечно, вам также нужно будет изменить оператор SELECT на оператор UPDATE.

Недостатком является то, что вы теряете доступ к данным одной строки, потому что вы вообще не выбираете их. Если вам это нужно, например. чтобы вычислить обновленное значение (в вашем случае test@<localipaddress>), вам, возможно, придется сначала запустить выбор, как вы это сделали, вычислить свои обновления в памяти, а затем использовать PreparedStatement или Пакетное обновление для выполнения соответствующих операторов UPDATE.

Пример подготовленного заявления:

public static int preparedUpdate(Connection conn, String localIPAddress) throws SQLException {
        int numChangedRows = 0;

            try (Statement stmt = conn.createStatement()) {
                ResultSet rs = stmt.executeQuery("SELECT * FROM table1");
                while (rs.next()) {
                    // id => something unique for this row within the table,
                    // typically the primary key
                    String id = rs.getString("id");
                    String jid = rs.getString("column1");
                    if("abc".equals(jid)) { // just some nonsense condition
                        try (PreparedStatement batchUpdate = conn.prepareStatement("UPDATE table1 SET column1 = ? where id = ?")) {
                            batchUpdate.setString(1, localIPAddress);
                            batchUpdate.setString(2, id);
                            numChangedRows = batchUpdate.executeUpdate();
                        }
                    }
                }
        }
        return numChangedRows;
    }

Пример пакетного обновления:

public static int[] batchUpdate(Connection conn, String localIPAddress) throws SQLException {
        int[] changedRows = null;
        try (PreparedStatement batchUpdate = conn.prepareStatement("UPDATE table1 SET column1 = ? where id = ?")) {
            try (Statement stmt = conn.createStatement()) {
                ResultSet rs = stmt.executeQuery("SELECT * FROM table1");
                while (rs.next()) {
                    // id => something unique for this row within the table,
                    // typically the primary key
                    String id = rs.getString("id");

                    String jid = rs.getString("column1");
                    if("abc".equals(jid)) { // just some nonsense condition
                        batchUpdate.setString(1, localIPAddress);
                        batchUpdate.setString(2, id);
                        batchUpdate.addBatch();
                    }
                }
            }
            changedRows = batchUpdate.executeBatch();
        }
        return changedRows;
    }
person Alexander    schedule 27.02.2017
comment
Спасибо за ваш быстрый ответ. @Александр - person Rakesh; 28.02.2017