2014-12-02 4 views
-2

Я создаю приложение, в котором люди дают оценки другим людям. Для этого я хочу вставить имена некоторых людей (скажем, 5) в базу данных во время установки приложения. Теперь, когда я запускаю приложение в первый раз, все идет хорошо. Но когда я запускаю его во второй раз, данные вставляются снова, делая его 10, т. Е. Дублируют данные. Проблема заключается в том, что всякий раз, когда я запускаю это действие, он добавляет данные. Каково решение этой проблемы? Вот мой код:Повторяющаяся проблема с данными android sqlite

@TargetApi(Build.VERSION_CODES.HONEYCOMB) 
    public class GamePlay extends ActionBarActivity { 
    //Some code----------- 

@Override 
protected void onCreate(Bundle savedInstanceState) { 

    super.onCreate(savedInstanceState); 
    setContentView(R.layout.gameplay); 
    //Some code---- 

    db=openOrCreateDatabase("MyGameData", MODE_PRIVATE, null); 

    try{ 
     db.execSQL("create table teachers(_id integer primary key autoincrement , name varchar(30) , gender varchar(2) , score integer)"); 
     Toast.makeText(this, "Table created", Toast.LENGTH_SHORT).show(); 
    } 

    catch(Exception e){ 
     Toast.makeText(this, "Exception 1", Toast.LENGTH_SHORT).show(); 
     Log.i("Create table", e.getMessage()); 
    } 

    // Insert values in table------- 


    String str_name[]={"arun", "dhanraj", "decoder", "sanjana"}; 
    String str_gender[]={"m", "m", "m", "f"}; 

    ContentValues cv = new ContentValues(); 

    for(int i=0; i<str_name.length; i++){ 

     cv.put("name", str_name[i]); 
     cv.put("gender", str_gender[i]); 
     db.insert("teachers", null, cv); 

    } 

    //Some code------ 
+0

Обязательно. Вы должны ** ОБНОВИТЬ ** существующие данные, если они уже присутствуют. Вы только ** INSERT ** записываете новые записи, дублируя информацию в своем db. –

+0

@DerGolem: Я хочу вставить новые данные во время установки. Сначала данных нет. Вот почему я использую INSERT. Обновление - это еще один процесс. Итак, как мне вставлять имена и пол? – Decoder

+1

Я бы сделал еще один запрос, чтобы узнать, существует ли пользователь, затем сделайте то, что говорит Der Golem, и обновите данные. –

ответ

1

Вы должны иметь SQLiteOpenHelper класс, который содержит некоторые методы для управления базами данных и жизненного цикла, как

onCreate(SQLiteDatabase db) // Called when the database is created for the first time. 
onDowngrade(SQLiteDatabase db, int oldVersion, int newVersion) //Called when the database needs to be downgraded. 
onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) // Called when the database needs to be upgraded. 

И других, вы можете посмотреть здесь: http://developer.android.com/reference/android/database/sqlite/SQLiteOpenHelper.html

После этого учебника должен держать вас на хороший путь об использовании этого помощника: http://developer.android.com/training/basics/data-storage/databases.html

Мой совет - создать несколько запросов, подобных тем, которые будут заполняться и выполняться после t он создал Таблицы, которые должны быть там тоже. Таким образом, ваше приложение будет только делать эти вставки в первый раз и сохранять их, даже если вы обновляете свою базу данных (если вы не указали что-то еще по методу onUpgrade()).

Это должно решить вашу проблему.

+0

Да, это исправило проблему. Благодарю. – Decoder

2

Если я получаю вашу проблему правильно, вы можете использовать вспомогательный класс и расширить SQLiteOpenHelper.

В методе onCreate вы можете вставить необходимые данные. Этот метод вызывается только один раз.

Надеюсь, это поможет.

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

  • Нет связанных вопросов^_^