自动创建新表与巨型表

时间:2019-06-29 10:58:41

标签: android sqlite

我正在接收存储在SD卡中的全部BLE数据。此数据组织在多个文本文件中,每个文件对应一个日期。 在Android上接收此数据时,我想将其保存在SQlite数据库中。 考虑使用相同的逻辑,每天创建一个表。我的问题是,是否有可能根据将要转移的天数自动创建表。经过一些研究,我发现了如何使用onUpgrade方法添加新表并更改数据库版本,但这似乎只能通过手动更改数据库版本来实现。 另一种选择是为所有数据创建一个表,然后将日期添加为列。

任何反馈都是有价值的!

1 个答案:

答案 0 :(得分:1)

通常,您将使用一个以日期为列的表。

如果在 onUpgrade 方法之外不存在表,则可以动态创建表。对于每个日期/文件,可以在接收文件时以及在加载/插入数据之前::-

  1. 使用CREATE TABLE IF NOT EXISTS the_table_with_a_name_that_relates_to_the_date (the_column_definitions)

    • 即如果该表存在,则以上内容实际上是一个NOOP。
  2. 使用类似方法(以下假定此方法在DatabaseHelper中)

:-

public bolean checkAndAddTable(String tableName) {
    boolean rv = false;
    SQLiteDatabase = this.getWriteableDatabase();
    Cursor csr = db.query("sqlite_master",null,"name=? AND type='table'",new String[]{tableName},null,null,null);
    if (csr.getCount() < 1) {
        db.execSQL("CREATE TABLE IF NOT EXISTS " + tableName + "(......SQL TO CREATE THE COLUMN DEFINITIONS......)");
        rv = true;
    }
    csr.close();
    return rv;
}
  • 请注意,该代码是原则代码,尚未运行或测试,因此可能会出现一些错误。

但是,从多个表中提取数据将/将需要检查表是否存在,以查看是否可以提取数据,这会引起额外的处理/复杂性(例如,如果不存在该怎么办)。 / p>