Я пытаюсь сохранить объект ArrayList в базе данных, но когда я устанавливаю объект в PreparedStatement, я получаю сообщение об ошибке, я хочу, чтобы пользователь ввел несколько значений в один столбец в базе данных.
мой Java-код:
import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* Servlet implementation class Uploads
*/
@WebServlet("/Rough")
public class Rough extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
ArrayList<String> name= new ArrayList<>();
try {
Class.forName("com.mysql.jdbc.Driver");
Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/practise", "root", "root");
PreparedStatement ps = con.prepareStatement("insert into imgtable(imgname,imgnnn,list) values(?,?,?)");
name.add("abc");
name.add("def");
ps.setString(1, "JAVA");
ps.setString(2, "Spring");
ps.setString(3, name);
int z = ps.executeUpdate();
if (z!=0) {
System.out.println("sucess");
}
} catch (Exception ex) {
System.out.println(ex);
}
}
}




Вы должны преобразовать массив в строку вручную удобным для вас способом, после чего вы сможете его сохранить. Проблема в том, что JDBC не имеет соответствующего типа для автоматического сопоставления вашего объекта, так что это зависит от вас. Другим вариантом может быть создание другой таблицы и установка внешнего ключа. Это зависит от данных настоящий, каким путем вы должны следовать.
вы можете перебирать свой список и добавлять его содержимое в БД в виде одной строки, если это то, что вы ищете, например
String list = "";
for (String s : name) {
list += s + " ";
}
ps.setString(3, list);
Вы можете сохранить любой объект в базе данных, преобразовав объект в массив byte[]. Ваш тип столбца должен быть типом "BLOB".
Пример фрагмента кода
...........................................
ByteArrayOutputStream baos = null;
ObjectOutputStream oout = null;
try{
baos = new ByteArrayOutputStream();
oout = new ObjectOutputStream(baos);
oout.writeObject(<<ARRAYLIST_OBJECT>>);
oout.close();
byte[] blobdata = baos.toByteArray();
preparedStmt.setBytes(5, blobdata);
.........................
preparedStmt.executeUpdate();
}catch(Exception e){
e.printStackTrace();
}
Итак, каков тип вашего столбца «список» в вашей базе данных? В MySQL (любой реляционной базе данных в этом отношении) у вас нет типа списка, поэтому вы не можете хранить список в строке. Вам нужно создать новую таблицу для этого списка и создать внешний ключ