Android将光标/查询结果保存到sqlite DB文件

时间:2017-05-21 23:27:31

标签: java android sqlite android-sqlite

我有一个查询SQL表并将子集保存到CSV文件的方法:

public void exportSQL(File outputFile, String c1) throws SQLException, IOException {

    csvWrite = new CSVWriter(new FileWriter(outputFile));

    curCSV = db.rawQuery("SELECT * FROM " + TABLE_NAME + " WHERE col1 = '" + c1 + "'", null);

    csvWrite.writeNext(curCSV.getColumnNames());

    while (curCSV.moveToNext()) {
        String arrStr[] = {curCSV.getString(0), curCSV.getString(1), curCSV.getString(2),
                curCSV.getString(3), curCSV.getString(4), curCSV.getString(5),
                curCSV.getString(6), curCSV.getString(7), curCSV.getString(8)};

        csvWrite.writeNext(arrStr);
    }

    csvWrite.close();
    curCSV.close();
}

但是,我还希望将此查询/子集另存为sqlite(.db)文件。

我已经看到了一些关于将整个数据库复制到另一个SQLite文件的问题,但是没有找到任何包含只保存表的子集的方法的内容。换句话说,我想查询一个表来获取一个游标,然后将该查询/游标的内容写入.db文件

在Java / Android中执行此操作的正确方法是什么?

有很多相关的问题,但它们似乎并不能涵盖这个具体案例。例如:

1 个答案:

答案 0 :(得分:0)

我不认为您可以简单地将查询/子集保存为可用作SQLite DB文件的DB文件,因为DB文件包含其他信息,例如它的主表。

你可能做的是创建一个新的,命名不同的空数据库,然后创建相应的表并用相关数据填充它们,最后保存新的DB文件。

另一种方法是复制数据库文件,将副本作为数据库打开,然后删除您不需要的组件(行表),只留下您需要的子集副本。< / p>

第三种可能是制作原件的副本,减去原件的副本,保存副本,然后从第1份副本恢复。