2013-07-29 3 views
0

sq-lite에 데이터를 삽입 할 응용 프로그램을 만들었습니다. 나는 동일한 데이터를 다시 입력하면 전자 토스트 마사지를주고 그 다음에 데이터를 다시 삽입하지 말아야한다. 내가 무엇을해야하는지 ..... SQLiteOpenHelper의android에서 sqlite에 데이터를 삽입 할 때 필터를 적용하는 방법

이제 데이터가 다시 삽입되어 방법 코드 ..... 활동 클래스의

public void insertdata(String name,String ph,String area){ 
    ContentValues cv=new ContentValues(); 
    cv.put("name", name); 
    cv.put("phone", ph); 
    cv.put("area", area); 
    sd=this.getWritableDatabase(); 
    sd.insert("location", null, cv); 
    sd.close(); 

방법을 사용 ......

public void onClick(View v) { 
       // TODO Auto-generated method stub 
       help=new MyHelper(getApplicationContext()); 
       help.getWritableDatabase(); 
       String myname=name.getText().toString(); 
       String call=phone.getText().toString(); 
       String myarea=area.getText().toString().trim(); 
       help.insertdata(myname, call, myarea); 

       Toast.makeText(getApplicationContext(), "data saved ", Toast.LENGTH_SHORT).show(); 

      } 
     }); 

답변

0

이 같은 뭔가를 시도 할 수 있습니다 :

ContentValues values=new ContentValues(); 
    cv.put("name", name); 
    cv.put("phone", ph); 
    cv.put("area", area); 

if (db == null) { 
db = getWritableDatabase(); 
    } 
if (isNameExists(name)) { //check if name exits 
     id = db.update(TABLE_NAME, values, name + " = ?", 
       new String[] {name}); 
    } else { 
     id = db.insert(TABLE_NAME, null, values); 
    } 

    public boolean isNameExists(String name) { 
    Cursor cursor = null; 
    boolean result = false; 
    try { 
     String[] args = { "" + name }; 
     StringBuffer sbQuery = new StringBuffer("SELECT * from ").append(
       TABLE_NAME).append(" where name=?"); 
     cursor = getReadableDatabase().rawQuery(sbQuery.toString(), args); 
     if (cursor != null && cursor.moveToFirst()) { 
      result = true; 
     } 
    } catch (Exception e) { 
     Log.e("AppoitnmentDBhelper", e.toString()); 
    } 
    return result; 
+0

이름이 이미 존재하는 경우 업데이트 방법은 무엇입니까 – 12345

+0

업데이트 방법도 작성했습니다 ... 필요에 따라 수정하십시오 .. –

+0

콘텐츠 이름과 전화 번호가 모두 3 개의 매개 변수를 넣어야합니다. 이름, 전화 번호 및 영역? – 12345

0

데이터가 될 수있다 방법은 당신이 이미 데이터베이스에 존재하는지 확인하지 않기 때문에 다시 삽입했다. 고유 한 조합 (아마도 이름과 전화 번호)에 대한 쿼리를 추가해야합니다. 해당 쿼리가 결과를 반환하면 사용자에게 데이터를 입력하라는 메시지를 표시 할 수 있습니다.

String query = "SELECT * FROM " + TABLE_NAME + " WHERE name = " + name; 
SQLiteDatabase db = this.getReadableDatabase(); 
Cursor cursor = db.rawQuery(query, null); 
if(cursor != null && cursor.moveToFirst()){ //if cursor has entry then don't reinsert 
    //prompt user with dialog 
} else { 
    //insert data 
} 

또한 Toast을 사용할 수 없습니다. 원하는 것은 Dialog입니다. 데이터가있는 경우 사용자에게 Dialog 사용자 정의를 표시하여 (1) 새 데이터 입력 (2) 기존 데이터 편집 (3) 게시중인 데이터를 다시 삽입하도록 선택할 수 있습니다. Toast은 "데이터를 다시 삽입하는 중"처럼 메시지를 표시합니다. 그것은 당신이 성취하고자하는 기능성처럼 들리지 않습니다.

데이터베이스를 업데이트하려면 변경할 필드에 따라 업데이트 구문을 사용하면됩니다.

if 구문을 입력하여 변경되는 필드를 확인하고 적절하게 쿼리에 추가하십시오. 대안으로 당신은 이와 비슷한 것을 사용할 수 있습니다.

public int updateContact(Contact contact) { 
    SQLiteDatabase db = this.getWritableDatabase(); 

    ContentValues values = new ContentValues(); 
    values.put(KEY_NAME, contact.getName()); 
    values.put(KEY_PH_NO, contact.getPhoneNumber()); 

    // updating row 
    return db.update(TABLE_CONTACTS, values, KEY_ID + " = ?", 
      new String[] { String.valueOf(contact.getID()) }); 
} 

저는 예제를 적합하게 수정했지만 기본 접근법을 볼 수 있습니다. 조건부를 사용하여 값이 제공되고 있는지 확인할 수 있습니다. ContentVlues 목록에 값을 추가하면 DB에서 값이 업데이트됩니다.

+0

이름이 update 일 경우 어떻게해야합니까? 모두 존재합니까? – 12345

+0

그게 당신이 원하는대로 달라집니다 - 당신이 값을 변경하려고하거나 같은 사람에 대해 여러 항목을 추가 하시겠습니까? 예를 들어 집, 휴대폰, 직장과 같이 2 개의 전화 번호를 원할 수도 있습니다. 이 경우 삽입하고 싶을 것입니다. 당신이 업데이트하고 싶다면 위의 정보를 추가 할 업데이트 구문을 사용하겠습니다. 같은 이름이 사용 된 경우 이름과 지역에 대한 전화 데이터를 업데이트하고 싶습니다. – Rarw

+0

... – 12345

관련 문제