不使用数据库存储表数据的最佳方法?

时间:2013-03-19 18:33:34

标签: java android data-structures

我需要存储来自已解析的XML的数据,我对解析没有任何问题,我可以处理。问题是我收到一个表数据基本上每次列名,列号和它自己的数据都不同。现在我不想使用SQLite数据库,因为我有少量条目,我认为这种情况并不存在。我甚至认为我不能使用它,因为我将不得不为我将收到的每个数据集创建一个新表。现在更清楚的是一些例子:

 <Details1_Collection>
    <Details1 ProductName="Bicycle" Units="2341" DefectedUnits="125" />
    <Details1 ProductName="Television" Units="3154" DefectedUnits="75" />
    <Details1 ProductName="Keyboard" Units="2413" DefectedUnits="12" />
    ...
  </Details1_Collection>

或其他XML

 <Details_Collection>
    <Details HireDate="2003-02-15T00:00:00" JobTitle="Chief Executive Officer"  BirthDate="1963-03-02T00:00:00" />
    <Details HireDate="2002-03-03T00:00:00" JobTitle="Vice President of Engineering" BirthDate="1965-09-01T00:00:00" />
    <Details HireDate="2001-12-12T00:00:00" JobTitle="Engineering Manager" BirthDate="1968-12- 13T00:00:00" />
    ...
 <Details_Collection>

现在您可以注意到XML标记不同:Details1_CollectionDetails_CollectionDetails1Details我几乎每次都会收到一个新的标签集。但这对我来说不是问题,因为我在更早地调用服务器时收到它们,所以我知道应该解析什么标签。我不需要存储属性以及我已经拥有的名称。我只需要存储值。

问题:

我应该如何存储基本上是表数据的属性数据但是每次都有不同的列名和数字的不同表?我宁愿不将这些数据存储为它的父对象中的String/Dom元素,而是将其解析为一些java 可以在UI线程上轻松访问的数据结构。

简而言之:

此数据是更大对象的一部分,我的目标是将其解析为某种数据结构并将其作为父类的一部分附加。

任何帮助都将不胜感激。

2 个答案:

答案 0 :(得分:0)

我偶然发现了以下论坛帖子:

http://www.javaprogrammingforums.com/java-programming-tutorials/696-multi-dimension-arraylist-example.html

ArrayLists的ArrayList有一个实现,这是代码:

import java.util.ArrayList;

public class ArrayList2d<Type>
{
ArrayList<ArrayList<Type>>  array;

public ArrayList2d()
{
    array = new ArrayList<ArrayList<Type>>();
}

/**
 * ensures a minimum capacity of num rows. Note that this does not guarantee
 * that there are that many rows.
 * 
 * @param num
 */
public void ensureCapacity(int num)
{
    array.ensureCapacity(num);
}

/**
 * Ensures that the given row has at least the given capacity. Note that
 * this method will also ensure that getNumRows() >= row
 * 
 * @param row
 * @param num
 */
public void ensureCapacity(int row, int num)
{
    ensureCapacity(row);
    while (row < getNumRows())
    {
        array.add(new ArrayList<Type>());
    }
    array.get(row).ensureCapacity(num);
}

/**
 * Adds an item at the end of the specified row. This will guarantee that at least row rows exist.
 */
public void Add(Type data, int row)
{
    ensureCapacity(row);
    while(row >= getNumRows())
    {
        array.add(new ArrayList<Type>());
    }
    array.get(row).add(data);
}

public Type get(int row, int col)
{
    return array.get(row).get(col);
}

public void set(int row, int col, Type data)
{
    array.get(row).set(col,data);
}

public void remove(int row, int col)
{
    array.get(row).remove(col);
}

public boolean contains(Type data)
{
    for (int i = 0; i < array.size(); i++)
    {
        if (array.get(i).contains(data))
        {
            return true;
        }
    }
    return false;
}

public int getNumRows()
{
    return array.size();
}

public int getNumCols(int row)
{
    return array.get(row).size();
}
}

这是我发现存储我想要存储的数据的最佳方式。 您如何看待Java专家?

感谢。

答案 1 :(得分:0)

您是否有理由无法执行典型的Java序列化?如同,创建表示数据的类,让它们实现Serializable,然后使用Object(Input|Output)Stream s读取整个对象图并将其写入文件?

请记住,只有当整个对象图形适合内存时,这才有效。