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

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

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

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

Выдается следующее исключение: Trace Exception

1 ответ

Решение

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

Недостатком является то, что вы теряете доступ к данным одной строки, потому что вы вообще не выбираете их. Если вам это нужно, например, для расчета обновленного значения (в вашем случае test@<localipaddress>) вам, возможно, придется сначала запустить выбор, как вы сделали, рассчитать ваши обновления в памяти, а затем использовать PreparedStatement или Batch Update для выполнения соответствующего 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;
    }
Другие вопросы по тегам