2011-08-12 69 views
1

我使用sqlite和java作为编程语言。我有一类是Sqlite数据类型

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

DATA是来自DataSet类的对象。 DataSet DATA = new DataSet(); – SunyGirl

+1

循环中出现什么问题?你为什么需要一次性写下它?你是否想要获得SQLite事务的好处? – jefflunt

回答

2

你想存储像一个图像的对象?所以,作为一个整体...让对象序列化是这样的:

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,查看它,并找出你的数据是否合理。

祝你好运!

+0

非常感谢:)它完美的作品! – SunyGirl

+0

不客气。高兴听到! –