#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 в любом случае за вашу помощь 😉