尝试迭代execSQL的字符串数组时出现问题

时间:2011-08-04 13:15:26

标签: android arrays sqlite iteration

我该怎么做:(为什么它不起作用? - 模拟器结束应用程序没有错误消息)

String [] aSQL;
aSQL = new String[50];

aSQL[0] = "CREATE TABLE tbl_team ("+
    "_id INTEGER PRIMARY KEY AUTOINCREMENT, "+
    "teamName TEXT NOT NULL);";

aSQL[1] = "CREATE TABLE tbl_cardType ("+
    "_id INTEGER PRIMARY KEY AUTOINCREMENT, "+
    "cardTypeName TEXT NOT NULL);";

for (int i = 0; i < aSQL.length; i++){
    db.execSQL(aSQL[i]);
}

而不是必须这样做:

db.execSQL(aSQL[0])
db.execSQL(aSQL[1])

如果有人想知道我为什么要这样做。这是因为我的时间紧迫,不知道另一种方式。我已经尝试过在SQLite浏览器中创建数据库并且失败了。将它放在assets文件夹中并在安装过程中将其复制。

当然要运行2个以上的SQL命令。

非常感谢您的任何帮助。

1 个答案:

答案 0 :(得分:0)

您可以在资产中包含create_tables.sql文件,然后在app start上执行它,如下所示:

InputStreamReader ir = new InputStreamReader(getAssets().open("create_tables.sql"));
BufferedReader br = new BufferedReader(ir);
SQLiteDatabase db = SQLiteDatabase.openDatabase(getDatabasePath("database.sqlite").getAbsolutePath(), null, SQLiteDatabase.OPEN_READWRITE|SQLiteDatabase.CREATE_IF_NECESSARY);
String l;
while ((l = br.readLine()) != null) db.execSQL(l);

<强>更新

好吧,让我们说你有

class MyApp extends Application {
  public static Application appContext;
  public void oncreate() { 
    appContext = this;

  }
}

然后你可以在任何地方完成上述工作

BufferedReader br = new BufferedReader(new InputStreamReader(MyApp.appContext.getAssets().open("create_tables.sql")));