的Android SQLite的怪异的行为
问题描述:
任何人能解释为什么:的Android SQLite的怪异的行为
db.execSQL("DROP TABLE IF EXISTS Definition;");
db.execSQL("CREATE TABLE Definition (txt TEXT);");
效果很好,但
db.execSQL("DROP TABLE IF EXISTS Definition; CREATE TABLE Definition (txt TEXT);");
确实NOTHING(无表 “定义” 这个Exec之后存在)。
(分贝是SQLiteDatabase的实例)
P.S.在iOS中,两种变体完全相同。以及在SQLite管理器(Firefox附加组件)中。
答
SQLite不希望一次执行多个命令。我将所有命令写入文本文件,读取行直到“;”在循环中逐个执行,直到readLine为空;
List<String> sqlExpressions = new ArrayList<String>();
try {
// read table creation sql script from the file
InputStream inStream = mContext.getResources().getAssets().open("createTables.sql");
BufferedReader reader = new BufferedReader(new InputStreamReader(inStream, "UTF-8"));
String line = null;
while((line = reader.readLine()) != null) {
sb.append(line + "\n");
if(line.lastIndexOf(";") > 0) {
sqlExpressions.add(sb.toString());
sb = new StringBuilder();
}
}
reader.close();
} catch (Exception e) {
Log.d("DB_Creation", e.getMessage());
}
for (String sqlExpr : sqlExpressions) {
database.execSQL(sqlExpr);
}