【问题标题】:How do I handle multiple database tables cleanly in Android?如何在 Android 中干净地处理多个数据库表?
【发布时间】:2011-05-14 01:52:23
【问题描述】:

我正在尝试创建一个 Android 应用程序,它可以处理玩过的游戏的历史及其分数,但是当我从记事本教程中扩展时,这变成了像这样重复语句的老鼠窝:

private static final String GAME_TABLE_CREATE =
"create table " + GAME_TABLE + " (_id integer primary key autoincrement, " 
+ "title text not null);";
private static final String PLAY_TABLE_CREATE =
    "create table " + PLAY_TABLE + " (_id integer primary key autoincrement, " 
    + "game_id integer, game_date date);";
private static final String PLAYER_TABLE_CREATE =
    "create table " + PLAYER_TABLE + " (_id integer primary key autoincrement, " 
    + "name text not null);";
private static final String SCORE_TABLE_CREATE =
    "create table " + SCORE_TABLE + " (_id integer primary key autoincrement, " 
    + "game_id int, player_id int, score int);";

   ...

public void onCreate(SQLiteDatabase db) {
db.execSQL(GAME_TABLE_CREATE);
db.execSQL(PLAY_TABLE_CREATE);
db.execSQL(PLAYER_TABLE_CREATE);
db.execSQL(SCORE_TABLE_CREATE);
}

这对于可读性和可维护性来说似乎是一场噩梦。关于如何更好地管理多个 SQL 表并将这些类型的列表变成漂亮干净的循环的任何建议?我正在考虑尝试通过资源字符串数组来做到这一点,但一直无法弄清楚如何管理它。

【问题讨论】:

    标签: android sql


    【解决方案1】:

    我在 Android 世界中不必处理这个问题,但在过去的 Web 世界中却有。我说过,对于初学者来说,您可能想查看一个 ORM 来管理您的语句。似乎有一些指针 here 可能会有所帮助。

    【讨论】:

      【解决方案2】:

      我通过使用//formatter: off 语句(并在之后打开它)关闭Eclipse 中的格式(您必须使用Helios 或更高版本)来管理此问题。 This SO question 将为您提供更多相关信息。

      我还将所有初始 SQL 语句(CREATE、触发器等)放在一个静态 String 数组中。这样,您的所有语句都可以在您的 onCreate 中使用此代码运行:

      public static final String[] SQL_CREATE_TABLES = new String[] { TABLE_1, TABLE_2};
      
      @Override
      public void onCreate(SQLiteDatabase db) {
           for (String sql : SQL_CREATE_TABLES)
               db.execSQL(sql);
      }
      

      SQL 语句也可以放在strings.xml 资源文件中,但我认为这不会有助于保持可读性或可维护性。

      【讨论】:

        【解决方案3】:

        我刚开始时遇到了同样的问题,在 Android 应用程序中将创建表作为语句进行管理变得非常麻烦,尤其是在开发过程中尝试更新架构。对我来说真正有效的方法是将我的数据库副本放在资产文件夹中,然后将数据库复制到数据文件夹中。第一次启动 DBAdapter 时,您可以检查数据库是否已经存在,如果不存在,您可以将数据库复制过来。这在需要预先填充数据或预先加载数据以进行测试的表中也很方便。它使在基于普通/GUI 的数据库工具中管理数据库模式变得更加容易。 有很多 Android 复制数据库代码示例,一个简单的 Google 搜索应该会让您朝着正确的方向前进。 希望这可以帮助, 干杯,

        【讨论】:

          猜你喜欢
          • 2011-08-01
          • 1970-01-01
          • 2014-03-02
          • 2021-10-22
          • 1970-01-01
          • 1970-01-01
          • 2021-07-14
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多