2012-08-03 49 views
1

任何人能解释为什么:的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附加组件)中。

回答

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