如何在Android中干净地处理多个数据库表?

如何在Android中干净地处理多个数据库表?,android,sql,Android,Sql,我正在尝试创建一个Android应用程序,它可以处理玩过的游戏及其分数的历史记录,但随着我从记事本教程扩展,这将变成一个重复声明的老鼠窝,如下所示: private static final String GAME_TABLE_CREATE = "create table " + GAME_TABLE + " (_id integer primary key autoincrement, " + "title text not null);"; private static final Str

我正在尝试创建一个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表,并将这些类型的列表转换为干净的循环,有什么建议吗?我曾考虑尝试通过资源字符串数组来实现这一点,但还没有弄清楚如何管理它

我在安卓世界中没有遇到过这种情况,但在过去的网络世界中遇到过。我已经说过,对于初学者来说,您可能想看看用于管理语句的ORM。似乎有一些建议可能会有所帮助。

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

我通过在Eclipse中关闭格式来管理这一点,您必须使用Helios或更高版本,方法是使用语句//formatter:off,然后再打开它。我会给你更多的信息

我还将所有初始SQL语句CREATE、触发器等放在一个静态字符串数组中。这样,所有语句都可以在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资源文件中,但我认为这无助于保持可读性或可维护性。

我通过在Eclipse中关闭格式来管理这一点,您必须使用Helios或更高版本,方法是使用语句//formatter:off,然后再打开它。我会给你更多的信息

我还将所有初始SQL语句CREATE、触发器等放在一个静态字符串数组中。这样,所有语句都可以在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资源文件中,但我认为这无助于保持可读性或可维护性。

我第一次启动时遇到了同样的问题,在Android应用程序中管理create tables as语句变得非常麻烦,特别是在开发过程中尝试更新模式。对我来说,真正有效的方法是将数据库的副本放在assets文件夹中,然后将数据库复制到data文件夹中。第一次启动DBAdapter时,可以检查数据库是否已经存在,如果不存在,则可以复制数据库。当表需要预先填充数据或预加载数据以进行测试时,这也很方便。在一个基于普通/GUI的数据库工具中管理数据库模式使生活变得更加容易。 有很多Android copy数据库代码示例,一个简单的谷歌搜索应该会让你找到正确的方向。 希望这有帮助,
干杯,

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