2012-08-03 7 views
1

아무도 그 이유를 설명 할 수 :안드로이드 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);"); 

이가 (더 테이블 "정의는"이 간부 후 존재하지 않는) 아무것도하지 않습니다.

P.S. (DB를위한 SQLiteDatabase의 인스턴스) iOS에서 두 변종은 절대적으로 동일합니다. 뿐만 아니라 SQLite 관리자 (파이어 폭스 추가 기능).

답변

4

SQLite는 한 번에 여러 명령을 실행하지 않습니다. 모든 명령을 텍스트 파일에 쓰고 ";"까지 줄을 읽습니다. readLine이 null이 될 때까지 루프에서 차례로 하나씩 실행되고 실행됩니다.

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