Как вставить несколько строк в MySQL с разными идентификаторами пользователя в Java? - PullRequest
0 голосов
/ 14 мая 2019

Я пытался реализовать код, который бы извлекал массив из идентификаторов пользователей из одной таблицы в MySQL, а затем использовал полученные значения, чтобы сделать массовую / пакетную вставку в другую таблицу из той же базы данных MySQL. Размер или длина пакетной вставки должны совпадать с массивом идентификаторов пользователей, которые были извлечены.

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

SubscribersServlet.java

 public static void bulkNotify(List<Notify> notifyList) {

    String sql = "insert into attnotif (attndid,sender,title,message,urgency,artistid) values (?,?,?,?,?,?)";
    try (Connection connection = DBConnect.getConnection()) {
        connection.setAutoCommit(false);
        try {
            try (PreparedStatement ps = connection.prepareStatement(sql)) {
                for (Notify notify : notifyList) {

                    ps.setInt(1, notify.getuserid());
                    ps.setString(2, notify.getSender());
                    ps.setString(3, notify.getNotifytitle());
                    ps.setString(4, notify.getNotifymessage());
                    ps.setString(5, notify.getNotifyurgency());
                    ps.setInt(6, notify.getArtistid());

                    ps.addBatch();
                }
                ps.executeBatch();
            }
            connection.commit();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }catch (SQLException e) {
        e.printStackTrace();
    }
}

Я хочу иметь возможность вставлять заголовок, сообщение, срочность, artistid (все с одинаковым значением) и идентификатор пользователя (разные значения) в несколько строк в моей базе данных.

1 Ответ

0 голосов
/ 14 мая 2019

Вы должны иметь счетчик в цикле for, и после того, как этот счетчик достигнет предела, вы должны вызвать метод executeBatch ().

    for (Notify notify : notifyList) {

        /**
         * do sth
         * */

        i++;

        if (i % 1000 == 0 || i == notifyList.size()) {
            ps.executeBatch(); // pile up 1000 items then load
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...