如何在MySQL中存储Java代码中的ArrayList?

如何在MySQL中存储Java代码中的ArrayList?,java,mysql,database-design,Java,Mysql,Database Design,哪种方法更好 a)将所有内容存储为BLOB b)创建列以存储生成AL的每个字符串 我还可以采取其他方法吗?当然b class Person{ String name; int age; //getters setters and other stuff } List<Person> persons = new ArrayList<Person>(); id | name | age 另请参见 当然b class Person{ String n

哪种方法更好

a)将所有内容存储为BLOB
b)创建列以存储生成AL的每个字符串


我还可以采取其他方法吗?

当然b

class Person{
  String name;
  int age;
  //getters setters and other stuff
}

List<Person> persons = new ArrayList<Person>();
id | name | age

另请参见


    • 当然b

      class Person{
        String name;
        int age;
        //getters setters and other stuff
      }
      
      List<Person> persons = new ArrayList<Person>();
      
      id | name | age

      另请参见


      您应该创建一个表来存储您的值列表

      表A:idA、col1、col2

      表B:idB、ida、等级、价值


      当然,使用表B中ida上的foreignkey,您应该创建一个表来存储您的值列表

      表A:idA、col1、col2

      表B:idB、ida、等级、价值


      当然,在表B中有一个关于ida的foreignkey,我会说方法B。将整个列表存储在一个blob中消除了首先使用数据库的许多优点


      如果它是一个复杂对象的列表,请查看类似JPA或Hibernate的内容,以帮助您进行数据库交互。

      我会说方法B。将整个列表存储在一个blob中首先会消除使用数据库的许多优点


      如果它是一个复杂对象的列表,请查看类似JPA或Hibernate的内容,以帮助您进行数据库交互。

      请快速学习数据库建模。。。这里指的是1:N关系,用于将每个字符串作为一行存储在不同的表中,外键(引用)指向对象所在的原始表中的行。

      请快速学习数据库建模。。。这里引用的是1:N关系,用于将每个字符串作为一行存储在不同的表中,并使用外键(引用)指向对象所在的原始表中的行。

      避免序列化对象。 在序列化对象时,存在巨大的潜在陷阱。 约书亚·布洛赫(Joshua Bloch)在中有一个完整的章节,专门讨论序列化,他总结说,如果可能的话,您应该避免序列化

      因此,选择选项B

      避免序列化对象。 在序列化对象时,存在巨大的潜在陷阱。 约书亚·布洛赫(Joshua Bloch)在中有一个完整的章节,专门讨论序列化,他总结说,如果可能的话,您应该避免序列化


      所以选择选项B

      你应该选择方法B,因为:

      • 在Java的未来版本中,
        ArrayList
        类的结构可能会改变,因此您将无法将blob反序列化回
        ArrayList
        实例
      • 将来,您可能希望将同一数据库与Java以外的语言(例如.NET中的C#)一起使用。您不能简单地将
        ArrayList
        blob反序列化回.NET列表
      • 当您将
        ArrayList
        存储为BLOB,然后转到DBMS管理控制台并编写查询时,您将无法看到这些BLOB的内容

      说到这里,我建议您阅读一本关于SQL和数据库设计的介绍性书籍,以及一本关于关系代数的理论书籍。这会让事情变得更清楚。

      你应该采用b方法,因为:

      • 在Java的未来版本中,
        ArrayList
        类的结构可能会改变,因此您将无法将blob反序列化回
        ArrayList
        实例
      • 将来,您可能希望将同一数据库与Java以外的语言(例如.NET中的C#)一起使用。您不能简单地将
        ArrayList
        blob反序列化回.NET列表
      • 当您将
        ArrayList
        存储为BLOB,然后转到DBMS管理控制台并编写查询时,您将无法看到这些BLOB的内容

      说到这里,我建议您阅读一本关于SQL和数据库设计的介绍性书籍,以及一本关于关系代数的理论书籍。这将使您更加清楚。

      为什么要创建列而不只是行?为什么要创建列而不只是行?