Как вставить Java ArrayList в таблицу MySQL?

#java #mysql #jdbc #arraylist

#java #mysql #jdbc #arraylist

Вопрос:

Не мог бы кто-нибудь любезно сказать мне, как я могу вставить значения Arraylist в таблицу MySQL в виде одной строки?

Например, вставьте «преступление, драма, боевик» в столбец «жанры» таблицы «featuredfilms_INFO».

Это часть моего кода:

 int i = 0;
List<String> genre = new ArrayList<String>();
.
.
.
Elements elms1 = doc.select("div.infobar"); 
Elements links1 = elms1.select("a[href]");
for (Element link1 : links1){
    if (link1.attr("href").contains("/genre/")) {
        genre.add(links1.get(i).text());
        i  ;
    }
}
System.out.println("movie genres:"   genre); 
.
.
try {
     String query = "INSERT into featuredfilms_INFO (movieId, genres)"   "VALUES (?, ?)";
     PreparedStatement preparedStmt = conn.prepareStatement(query);
     preparedStmt.setString (1, ID);
     preparedStmt.setString (2, genre);
   .
   .
   .
}
  

Моя проблема в том, что я не могу использовать setString for genre, поскольку он не имеет типа string. Я немного смущен, так как вначале я определил genre как string, но после некоторого поиска я обнаружил, что в Java для динамических массивов я должен использовать ArrayList .

Может кто-нибудь подробно объяснить мне, что я должен делать и почему?

Комментарии:

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

2. Используете ли вы JDBC, JPA, JDO и т.д.? Дополнительная информация, необходимая здесь

3. Вам нужна одна строка для каждого жанра или вам нужна одна строка с длинной строкой, содержащей все жанры (например, через запятую)?

4. @hd1 — это обычный JDBC…

5. @ammoQ: Мне нужно, чтобы все жанры каждого фильма были сохранены в одной записи, например: movie1: преступление, драма, затем следующая запись: movie2: боевик, фэнтези, история, следующая запись: movie3: ….

Ответ №1:

Просто соедините все строки перед вставкой.

  String comma="";
 StringBuilder allGenres = new StringBuilder();
 for (String g: genre) {
    allGenres.append(comma);
    allGenres.append(g);
    comma = ", ";
 }

 String query = "INSERT into featuredfilms_INFO (movieId, genres)"   "VALUES (?, ?)";
 PreparedStatement preparedStmt = conn.prepareStatement(query);
 preparedStmt.setString (1, ID);
 preparedStmt.setString (2, allGenres.toString());
  

Может быть, даже

  preparedStmt.setString (2, genre.toString());
  

было бы даже достаточно хорошо, но вышеупомянутое решение дает вам больше свободы в том, как объединять жанры.

Комментарии:

1. Большое спасибо за вашу помощь :), это сработало, только добавив. toString() в последнюю строку, как вы сказали

Ответ №2:

Я думаю, вы в замешательстве, потому что ваш List<String> называется genre, и вы пытаетесь вставить его как есть. Это не сработает. Вам нужно вставить каждый элемент из List в вашу таблицу.

Предполагая, что вы объявили и инициализировали ID переменную и она List<String> genre заполнена правильными значениями, тогда вам следует только просмотреть список и вставить каждый жанр:

 String query = "INSERT into featuredfilms_INFO (movieId, genres)"   "VALUES (?, ?)";
PreparedStatement preparedStmt = conn.prepareStatement(query);
preparedStmt.setString (1, ID);
for (String realGenre : genre) {
    preparedStmt.setString (2, realGenre);
    preparedStmt.executeUpdate();
}
  

Комментарии:

1. на самом деле я обобщил вставку в своем вопросе, я имею в виду, что это: ВСТАВИТЬ в featuredfilms_INFO (MovieID, genre, country) » «ЗНАЧЕНИЯ (?, ?, ?)»; так что теперь, когда я пишу ваш ответ, я получаю сообщение об ошибке «Для параметра 3 не указаны значения», и когда я опускаю строку executeUpdate в цикле for, он автоматически вставляет последний жанр для каждого фильма!! 🙁 PreparedStatement preparedStmt = conn.prepareStatement(запрос);

2. @monamona эта часть не обсуждается, и ошибка очень специфична: вы заявляете, что вам нужно отправить 3 параметра, но предоставляете только 2. Укажите третий параметр или удалите его вообще.

3. Я предоставил 3-й вариант, я просто не писал здесь. но я получил ошибку, однако она была решена только путем добавления toString(), то есть: preparedStmt.setString (2, genre. toString()); tnx в любом случае за вашу помощь 😉