2014-12-02 2 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

당신은

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. 

그리고 다른 것과 같은 데이터베이스 관리 및 라이프 사이클에 대한 몇 가지 방법을 포함하는 SQLiteOpenHelper 클래스가 있어야합니다, 당신은 여기에 모양을 가질 수있다 이 도우미 사용에 대한 좋은 길 : http://developer.android.com/training/basics/data-storage/databases.html

내 조언은 t를 채우고 실행할 쿼리와 같은 일부 쿼리를 만드는 것입니다. 그는 거기에 있어야 테이블의 창조. 이렇게하면 앱에서 처음으로 삽입 만하고 데이터베이스를 업데이트하더라도 유지합니다 (onUpgrade() 메소드에서 다른 것을 명시하지 않은 경우).

이렇게하면 문제가 해결됩니다.

+0

예, 이로 인해 문제가 해결되었습니다. 감사. – Decoder