Sqlite数据类型

时间:2011-08-12 21:33:08

标签: java sqlite

我使用sqlite和java作为编程语言。我有一个班级

public class DataSet {

    public ArrayList<Double> a = null;
    public ArrayList<Double> b = null;
    public ArrayList<Double> c = null;

    public DataSet() {
        a = new ArrayList<Double>();
        b = new ArrayList<Double>();
        c = new ArrayList<Double>();
    }
}

我想存储DATA,其中DataSet DATA=new DataSet();位于sqlite中。但我希望一次在for循环中逐个获取数据)。有没有我可以使用的数据集,并将整个事物像C#中的图像一样存储?

1 个答案:

答案 0 :(得分:2)

您想要像Image一样存储对象吗?所以作为一个整体...使对象Serializable像这样:

public class DataSet implements Serializable {
  /* this is the version of this class,
     increment, when you change the implementation */
  public static final serialVersionUID  = 1L;
  ...
}

并将二进制结果存储到具有ObjectOutputStream的字节数组中。这个字节数组可以作为BLOB保存到数据库中。例如,如果您的表具有id和数据列:

byte[] data;
ByteArrayOutputStream bos = new ByteArrayOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(bos);
try {
  oos.writeObject(DATA);
  data = bos.toByteArray();
} finally {
  oos.close();
}    

PreparedStatement pstmt = jdbcConnection.prepareStatement(
    "insert into MYTABLE (id, data) values (?, ?)");
pstmt.setLong(1);
pstmt.setBlob(2, new ByteArrayInputStream(data));

...

提交数据,关闭连接。警告:此代码未经过测试......

再次从数据库中读取blob,您可以在从BLOB获取的字节数组上使用ObjectInputStream,就像上面的方法一样。我留给你代码。

请记住,以序列化的方式存储数据是人类无法读取的,因此您无法打开SQLite,查看它并查明您的数据是否合理。

祝你好运!