>

방금 안드로이드에서 sqlite를 사용하는 법을 배웠습니다. 삽입 될 때 중복 데이터를 방지하는 방법 .. 같은 데이터 입력이있을 때 데이터를 덮어 쓰게됩니까?

여기서는 코드 스 니펫을 첨부합니다 :

@Override
    public void onCreate(SQLiteDatabase db) {
        String CREATE_FAVORIT_TABLE = "CREATE TABLE " + Constant.favoritDBtable + "("
                + Constant.id_postFav + " INTEGER PRIMARY KEY AUTOINCREMENT," + Constant.titleFav + " TEXT," + Constant.namaPerusahaanFav + " TEXT,"
                + Constant.lokasiFav + " TEXT," + Constant.kriteria_1Fav + " TEXT," + Constant.kriteria_2Fav
                + " TEXT," + Constant.kriteria_3Fav + " TEXT," + Constant.gajiFav + " TEXT," + Constant.img_logoFav
                + " TEXT," + Constant.tanggalFav + " TEXT);";
public String addFavorit(Favorit favorit){
        SQLiteDatabase db = this.getWritableDatabase();
//        long rows = 0;
        ContentValues values = new ContentValues();
        values.put(Constant.titleFav, favorit.getTitleFav());
        values.put(Constant.namaPerusahaanFav, favorit.getNamaPerusahaanFav());
        values.put(Constant.lokasiFav, favorit.getLokasiFav());
        values.put(Constant.kriteria_1Fav, favorit.getKriteria_1Fav());
        values.put(Constant.kriteria_2Fav, favorit.getKriteria_2Fav());
        values.put(Constant.kriteria_3Fav, favorit.getKriteria_3Fav());
        values.put(Constant.gajiFav, favorit.getGajiFav());
        values.put(Constant.img_logoFav, favorit.getImg_logoFav());
        values.put(Constant.tanggalFav, favorit.getTanggalFav());
      db.insert(Constant.favoritDBtable, null, values,);
Log.d("Favorit saved: ", "Success 200 OK");
        return null;
    }

MainActivity.java

@Override
    public void onClick(View v) {
        if (job.getTitle() != null && job.getLokasi() != null){
        saveToFavoritDB();
        }
    }
    private void saveToFavoritDB() {
        Favorit favorit = new Favorit();
        favorit.setTitleFav(job.getTitle());
        favorit.setGajiFav(job.getGaji());
        Log.d(TAG, "gaji " + job.getGaji());
        db.addFavorit(favorit);
        List<Favorit> favList = db.getAllFavorit();
        for (Favorit each : favList) {
            String log = "ID: " + each.getTitleFav() + ", Name: " + each.getLokasiFav() + ", Phone: " + each.getGajiFav();
            Log.d(TAG, "saveToFavoritDB: " + String.valueOf(db.getCountFavorit()));
            Log.d(TAG, "Hasil: " + log);
        }
    }

나를 도와주세요

  • 답변 # 1

    행을 검사하는 함수가 db에 있는지의 여부

    private static boolean CheckIsInDBorNot(String titleFav) {
            String selectQuery = "SELECT  * FROM " + Constant.favoritDBtable + " WHERE " + Constant.titleFav +"'"+titleFav "'";
            final SQLiteDatabase db = open();
            Cursor cursor = db.rawQuery(selectQuery, null);
            if (cursor.getCount() <= 0) {
                cursor.close();
                return false;
            }
            cursor.close();
            return true;
        }
    
    

    확인보다

    if (!CheckIsInDBorNot(commentOrderId, commentId)) {
                    db.insertOrThrow(Constant.favoritDBtable, null, cVal);
                }
    
    

    확인하고 삽입합니다

  • 답변 # 2

    addFavorit 를 진행하기 전에  메소드를 사용하면 중복을 방지하기 위해 하나의 메소드를 추가하여 데이터가 이미 존재하는지 확인할 수 있습니다.

     boolean check;
      check = checkDuplicate(...,...,...,id_post); // check whether data exists
        if(check == true)  // if exists
        {
           Toast.makeText(MainActivity.this, " Data Already Exists", Toast.LENGTH_LONG).show();
        }else{
            db.addFavorit(favorit);
      }
      public static boolean checkDuplicate(String TableName,String dbfield, String fieldValue, int id_post) {
      String Query = ".... WHERE "+ Constant.id_postFav +"="+ id_post; // your query 
      Cursor cursor = db.rawQuery(Query, null);
          if(cursor.getCount() <= 0){
          cursor.close();
          return false;
         }
          cursor.close();
          return true;
      }
    
    

  • 답변 # 3

    IsItemExist() 메소드 작성  당신의 DatabaseHelper 에서   IsItemExist(name,mobile) 와 같은 활동 클래스 에서이 메소드를 호출하십시오.

    public boolean IsItemExist(String name,String mobile) {
        try
        {
            SQLiteDatabase db=this.getReadableDatabase();
            Cursor cursor=db.rawQuery("SELECT "+NAME+" FROM "+TABLE+" WHERE "+NAME+"=?",new String[]{name});
            Cursor cursor1=db.rawQuery("SELECT "+MOBILE+" FROM "+TABLE+" WHERE "+MOBILE+"=?",new String[]{mobile});
            if (cursor.moveToFirst() && cursor1.moveToFirst())
            {
                db.close();
                Log.d("Record  Already Exists", "Table is:"+TABLE+" ColumnName:"+NAME);
                return true;//record Exists
            }
            Log.d("New Record  ", "Table is:"+TABLE+" ColumnName:"+NAME+" Column Value:"+NAME);
            db.close();
        }
        catch(Exception errorException)
        {
            Log.d("Exception occured", "Exception occured "+errorException);
            // db.close();
        }
            return false;
    }
    
    

관련 자료

  • 이전 의존성 주입 또는 팩토리 패턴 C #
  • 다음 Azure Stream Analytics에서 Event Hub로 출력 배치 크기를 설정 하시겠습니까?