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

Android 尝试迭代execSQL的字符串数组时出现问题,android,arrays,sqlite,iteration,Android,Arrays,Sqlite,Iteration,我如何做到这一点:为什么它不起作用Emulator结束应用程序而不显示错误消息 如果有人想知道我为什么要这样做。这是因为我的日程安排很紧,不知道另一种方法。我尝试过在SQLite浏览器中创建数据库,但失败了。将其放在assets文件夹中,并在安装过程中进行复制 当然,要运行的SQL命令远不止2个 非常感谢您的帮助。您可以在资产中包含一个create_tables.sql文件,然后在应用程序启动时执行它,如下所示: InputStreamReader ir = new InputStreamRea

我如何做到这一点:为什么它不起作用Emulator结束应用程序而不显示错误消息

如果有人想知道我为什么要这样做。这是因为我的日程安排很紧,不知道另一种方法。我尝试过在SQLite浏览器中创建数据库,但失败了。将其放在assets文件夹中,并在安装过程中进行复制

当然,要运行的SQL命令远不止2个


非常感谢您的帮助。

您可以在资产中包含一个create_tables.sql文件,然后在应用程序启动时执行它,如下所示:

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")));

你的航海日志怎么说?你说模拟器在没有任何错误消息的情况下结束你的应用程序。通常模拟器只是说强制关闭或ANR。在LogCat中看不到问题,没有红线,表示由信号11终止。我通常会收到您提到的错误消息,但在本例中不会,感谢您的天真-它的编写方式,它不也尝试执行db.execSQLaSQL[2]然后执行3,4,。。。由于aSQL[2]未初始化,哪个会失败?aSQL.length应该是50,不是吗?Joubarc可能是对的。这是我对.length是否给出数组大小或初始化了多少变量的误解。嗨,我已经试过了。它说getAssets和getDatabasePath方法未定义。你是说把它放在我的主课而不是DbAdapter课上?如果是这样的话,它会在每次应用程序运行时运行这个,我不想这样,我想我应该从DbAdapter类运行这种东西,DbAdapter类在创建和更新时处理数据库。很抱歉,我不熟悉Java/Android编程,并且感到困惑。ThanksgetAssets和getDatabasePath是上下文的方法,所以只需将上下文活动和应用程序实例传递给DbAdapter即可。为此,我将在周一尝试并提供反馈。我已经对此进行了另一次查看,但仍然不理解。我试着用这个和其他很多东西作为前缀,我不仅仅是懒惰。我没有时间去了解每件事的细节,比如什么是事情;方法和上下文,并在我编写android应用程序之前传递上下文。我需要边走边学习这些东西,我希望你或这个社区的其他人能帮助我。非常感谢
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")));