我该怎么做:(为什么它不起作用? - 模拟器结束应用程序没有错误消息)
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命令。
非常感谢您的任何帮助。
答案 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")));