2013-12-05 5 views
0

У меня есть расширение SQLiteOpenHelper. Код ниже.SQLiteOpenHelper onCreate вызывается каждый раз

package com.Parapaparam.association; 

    import java.io.IOException; 
    import java.io.InputStream; 

    import android.content.Context; 
    import android.database.sqlite.SQLiteDatabase; 
    import android.database.sqlite.SQLiteOpenHelper; 
    import android.util.Log; 

    public class DBHelper extends SQLiteOpenHelper { 

    private static final String TAG = "Associations"; 

    private static Context myContext; 
    private static final String DB_NAME = "association.db"; 
    private static final int DB_VERSION = 1;  
    private SQLiteDatabase db; 


    public DBHelper(Context context) { 
     super(context, DB_NAME, null, DB_VERSION); 
     myContext = context;   
    } 

    @Override 
    public void onCreate(SQLiteDatabase db) { 
     Log.d(TAG, "- onCreate DB -"); 
     String text;   
     //InputStream is = this.getResources().openRawResource (R.raw.sql); 
     try { 
      InputStream inStream = myContext.getResources().openRawResource(R.raw.db); 

      int size = inStream.available(); 

      // Read the entire asset into a local byte buffer. 
      byte[] buffer = new byte[size]; 
      inStream.read(buffer); 
      inStream.close(); 

      // Convert the buffer into a string. 
      text = new String(buffer); 


     } catch (IOException e) { 
      // Should never happen!   
      throw new RuntimeException(e); 
     } 

     String[] str = text.split(";"); 
      for (String s : str) { 
       Log.d(TAG, s); 
       db.execSQL(s);   
      } 
    } 


    @Override 
    public void onUpgrade(SQLiteDatabase arg0, int arg1, int arg2) { 
     // TODO Auto-generated method stub 

    } 

} 

У меня есть класс, который вызывает мою БД.

public class DBInteraction { 
    private DBHelper dbHelper; 
    private SQLiteDatabase db;  


    public DBInteraction(Context context) { 
     dbHelper = new DBHelper(context); 
    } 

    private void openDB() { 
     db = dbHelper.getWritableDatabase(); 
    } 
} 

Каждый раз при запуске приложения вызывается метод DBHelper onCreate. И у меня есть исключение:

Caused by: android.database.sqlite.SQLiteException: table associations 
already exists: CREATE TABLE associations (_id INTEGER PRIMARY KEY, id_word 
INTEGER, association TEXT) 

Почему метод метода WithCreate вызывает каждый раз, когда БД уже создана?

Почему это происходит?

+0

Возможно, это произошло из-за того, что вы, возможно, внесли некоторые изменения в свою предыдущую БД и попытались открыть ее снова, переопределив старый. Просто удалите приложение с устройства и повторите попытку. – GrIsHu

+0

@laalto В res/raw/db У меня есть свалка sql моего db. – eugeneek

+0

@Roc Да, и нет дубликатов 'create tables association 'там? – laalto

ответ

0

У меня была та же проблема. Через несколько минут, чтобы найти ответ, я удалил весь db, снова выполнил приложение (затем был создан новый db), после чего я загрузил db со всеми данными.

Когда я загрузил хороший db, я использовал кнопку «Вставить файл на устройство» в DDMS, а не перетащить &. Я думаю, что это может быть моей проблемой, и может быть и твоей.

Смежные вопросы