Android SQLite奇怪的行为

时间:2012-08-03 16:31:40

标签: 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 (此执行后没有表“定义”)。

(db是SQLiteDatabase的实例)

P.S。在iOS中,两种变体完全相同。以及SQLite管理器(Firefox附加组件)。

1 个答案:

答案 0 :(得分:4)

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