2011-10-04 2 views
6

오늘까지 12 개의 다른 테이블로 데이터베이스를 만들려고합니다. 이제는 앱을 제거하고 다시 설치 한 후 (또는 앱 데이터를 지운 후에) 처음으로 앱을 시작할 때마다 제목에 오류 메시지가 표시됩니다. 그러나,이 오류가 발생 후 응용 프로그램을 시작할 두 번째로 잘 작동합니다. 아래 코드는 안드로이드 메모장 튜토리얼과 거의 같은 내 DatabaseHelper 클래스의 코드입니다.안드로이드 : 데이터베이스를 생성 할 때 setLocale()을 수행하지 못했습니다.

이 오류는 데이터베이스가 내 활동에서 열리고 첫 번째 쿼리를 작성하려고 시도한 후에 발생합니다.

이 문제의 원인과 해결 방법에 대한 제안 사항은 무엇입니까?

private static class DatabaseHelper extends SQLiteOpenHelper { 

    private static String DB_PATH = "/data/data/my_app/databases/"; 

    DatabaseHelper(Context context) { 
     super(context, DATABASE_NAME, null, DATABASE_VERSION); 
    } 

    @Override 
    public void onCreate(SQLiteDatabase db) { 
     if (!checkDataBase()) { 
      db.execSQL(TABLE_1); 
      db.execSQL(TABLE_2); 
      db.execSQL(TABLE_3); 

      db.execSQL(TABLE_4); 
      db.execSQL(TABLE_5); 
      db.execSQL(TABLE_6); 

      db.execSQL(TABLE_7); 
      db.execSQL(TABLE_8); 
      db.execSQL(TABLE_9); 

      db.execSQL(TABLE_10); 
      db.execSQL(TABLE_11); 
      db.execSQL(TABLE_12); 
     } 
    } 

    @Override 
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
     Log.w(TAG, "Upgrading database from version " + oldVersion + " to " + newVersion + ", which will destroy all old data"); 
     db.execSQL("DROP TABLE IF EXISTS " + TABLE_1); 
     db.execSQL("DROP TABLE IF EXISTS " + TABLE_2); 
     db.execSQL("DROP TABLE IF EXISTS " + TABLE_3); 

     db.execSQL("DROP TABLE IF EXISTS " + TABLE_4); 
     db.execSQL("DROP TABLE IF EXISTS " + TABLE_5); 
     db.execSQL("DROP TABLE IF EXISTS " + TABLE_6); 

     db.execSQL("DROP TABLE IF EXISTS " + TABLE_7); 
     db.execSQL("DROP TABLE IF EXISTS " + TABLE_8); 
     db.execSQL("DROP TABLE IF EXISTS " + TABLE_9); 

     db.execSQL("DROP TABLE IF EXISTS " + TABLE_10); 
     db.execSQL("DROP TABLE IF EXISTS " + TABLE_11); 
     db.execSQL("DROP TABLE IF EXISTS " + TABLE_12); 
     onCreate(db); 
    } 

    private boolean checkDataBase() { 
     SQLiteDatabase checkDB = null; 
     try { 
      checkDB = SQLiteDatabase.openDatabase(DB_PATH + DATABASE_NAME, null, SQLiteDatabase.OPEN_READONLY); 
      checkDB.close(); 
     } catch (SQLiteException e) { 

     } 
     return checkDB != null ? true : false; 
    } 
} 
+1

어쩌면이 대답을 시도해보십시오. 그것은 나를 위해 일했습니다. http://stackoverflow.com/questions/2528489/no-such-table-android-metadata-whats-the-problem – gonzobrains

답변

6

데이터베이스에 안드로이드 관련 메타 데이터가 포함되어 있지 않은 것 같습니다.

SQLiteDatabase.openDatabase()을 호출 할 때 SQLiteDatabase.NO_LOCALIZED_COLLATORS 플래그를 사용해야합니다. 더 이상 문제가 발생하지 않습니다. 적어도 그것은 나를 위해 일했습니다.

+1

SQLiteDatabase.NO_LOCALIZED_COLLATORS | SQLiteDatabase.OPEN_READWRITE – Dimitri

관련 문제