我试图在数据库中存储ArrayList对象

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了我试图在数据库中存储ArrayList对象相关的知识,希望对你有一定的参考价值。

我试图将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();
 }

以上是关于我试图在数据库中存储ArrayList对象的主要内容,如果未能解决你的问题,请参考以下文章

如何创建一个可以存储多个对象的arraylist类?

试图在java中的Arraylist中找到所有出现的对象

ListFragments 错误的数据奇怪的寻呼机

从ViewPager android替换片段

从ArrayList中存储的数据动画CandleStick图表

如何保存或存储对象的 ArrayList?