2012-08-03 27 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); 
}