【问题标题】:Android save cursor/query results to sqlite DB fileAndroid将光标/查询结果保存到sqlite DB文件
【发布时间】:2017-05-22 15:15:40
【问题描述】:

我有一个查询 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 中执行此操作的正确方法是什么?

对此有许多相关问题,但它们似乎并未涵盖此特定案例。例如:

【问题讨论】:

  • 第一个链接已经包含了您需要的一切。 SQLite 将不存在的文件视为新的空数据库,SELECT 查询可以进行过滤。

标签: java android sqlite android-sqlite


【解决方案1】:

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

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

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

第三种可能是复制原件,缩减原件,保存副本,然后从第一个副本恢复。

【讨论】:

    猜你喜欢
    • 2011-08-29
    • 1970-01-01
    • 2014-02-20
    • 1970-01-01
    • 1970-01-01
    • 2011-11-07
    • 2013-09-30
    • 1970-01-01
    • 2016-04-18
    相关资源
    最近更新 更多