如何在 Android 中干净地处理多个数据库表?
Posted
技术标签:
【中文标题】如何在 Android 中干净地处理多个数据库表?【英文标题】:How do I handle multiple database tables cleanly in 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 表并将这些类型的列表变成漂亮干净的循环的任何建议?我正在考虑尝试通过资源字符串数组来做到这一点,但一直无法弄清楚如何管理它。
【问题讨论】:
【参考方案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 搜索应该会让您朝着正确的方向前进。 希望这可以帮助, 干杯,
【讨论】:
以上是关于如何在 Android 中干净地处理多个数据库表?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Android 中干净地叠加 ScrollableViews
Android Room Database:如何嵌入多个实体