Я пытаюсь сохранить объект ArrayList в базе данных - PullRequest
0 голосов
/ 05 марта 2019

Я пытаюсь сохранить объект 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);
        }
        }


}

Ответы [ 3 ]

0 голосов
/ 05 марта 2019

вы можете перебирать свой список и добавлять его содержимое в БД в виде одной строки, если это то, что вы ищете, например,

String list = "";
for (String s : name) {
  list += s + " ";
}
ps.setString(3, list);
0 голосов
/ 05 марта 2019

Вы можете сохранить любой объект в базе данных, преобразовав его в массив 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();
 }
0 голосов
/ 05 марта 2019

Вы должны преобразовать массив в строку вручную удобным для вас способом, чем вы сможете его сохранить.Проблема в том, что JDBC не имеет соответствующего типа для автоматического сопоставления вашего объекта, так что вам решать.Другим вариантом может быть создание другой таблицы и установка внешнего ключа.От данных real зависит, как вам следует следовать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...