【问题标题】:How to dynamically create table in database using greendao or ORMLite?如何使用greendao或ORMLite在数据库中动态创建表?
【发布时间】:2014-09-17 11:44:18
【问题描述】:

如何使用greendao或ORMLite在数据库中动态创建表?当用户按下按钮时,我想在数据库中创建新表,对于数据库中的每个新表,数据模型是相同的,但我需要具有不同名称的表。这可能吗?

【问题讨论】:

  • 还有什么用?添加第二个表:THETABLEidname 列。然后在第一个表中添加THETABLE_id ...现在您可以将所有这些数据存储在第一个表中(而不是添加新表,您正在将行添加到 THETABLE 并使用它 id(作为 THETABLE_id)插入到第一个表
  • 感谢您的回复,但这不能解决我的问题。我有字典的集合,我创建了一个表,我在其中存储每个字典的数据(字典名称,作者......)但是当用户想要安装新字典以创建具有该字典名称的新表时,我需要在我想要的新表中存储该词典的单词。
  • 它是...制作表格 Words(id, word, translation, dictionaryID) 和表格 Dictionary(id, name, author, etc.) ... 你不需要新的 Words 表格每个字典 ... 只需使用 Dictionary 表中的 dictionaryID 外键...

标签: android sqlite ormlite greendao


【解决方案1】:

关于greendao:

无法动态创建新表。使用 greendao,处理数据库的代码由 J2SE 应用程序(使用 daogenerator)在您的开发站上创建。

关于奥姆莱特:

直到现在我还没有使用过 Ormlite,但我怀疑在运行时生成新表是可能的。

结论:

恕我直言,数据库设计,您必须在运行时创建新表是不好的做法,因为您将无法从 ORM 框架中受益。这样的设计也很难维护(如果不是不可能的话)和/或测试。最重要的是,这样的设计对于其他开发人员来说可能很难理解,因为它真的很少见。 因此,您应该重新设计您的数据库模式。

【讨论】:

    【解决方案2】:

    你可以使用 SQLite

    public void createUserTable(DatabaseOperations d, String user) {
        final SQLiteDatabase db = getWritableDatabase();
        String CREATE_TABLE_NEW_USER = "CREATE TABLE " + user + " (" + UserInfo.NOTES + " TEXT)";
        db.execSQL(CREATE_TABLE_NEW_USER);
        db.close();
    }
    

    【讨论】:

      猜你喜欢
      • 2012-03-26
      • 1970-01-01
      • 2022-12-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多