使用SQLITEOpenHelper将BLOB存储在Android SQLite中

时间:2010-09-03 23:40:52

标签: java android sqlite blob inputstream

有没有办法使用SQLOpenHelper将BLOB存储到Android的SQLite中?

我的BLOB类型InputStream

1 个答案:

答案 0 :(得分:3)

SQLite不支持流式BLOB或CLOB数据。您有四种选择:

  • 将InputStream转换为byte []。只有在你有足够的内存时才会这样做(见下文)。
  • 使用FileOutputStream或支持流媒体的Android API
  • 将数据拆分为小块,然后存储在SQLite中
  • 使用适用于Android的数据库并支持流式传输。我只知道H2 database。但要注意Android对H2的支持是非常新的。在这种情况下,您需要使用JDBC API,并且您可能希望启用LOBs in the database,否则每个大型BLOB都存储在单独的文件中。

要将InputStream转换为字节数组,可以使用:

public static byte[] readBytesAndClose(InputStream in) throws IOException {
    try {
        int block = 4 * 1024;
        ByteArrayOutputStream out = new ByteArrayOutputStream(block);
        byte[] buff = new byte[block];
        while (true) {
            int len = in.read(buff, 0, block);
            if (len < 0) {
                break;
            }
            out.write(buff, 0, len);
        }
        return out.toByteArray();
    } finally {
        in.close();
    }
}