2011-10-19 3 views
3

JSON 응답을 구문 분석 한 후 항목을 채울 데이터베이스가 있습니다. 값이 이미 데이터베이스에 있는지 확인하고 다시 삽입하지 못하도록 할 수 있습니까?값이 안드로이드 데이터베이스에 이미 존재하는지 확인하는 방법

예 : 데이터베이스의 이름 : 테이블의 Exicom.sqlite

이름 : 데이터베이스에 TimeReport

필드 : 사용자 ID, CLIENTNAME

내가 안드로이드에 SQLite는 사용하고 있습니다. 귀하의 의견

이 내 헬퍼 클래스에 대한

감사합니다. 너무 길어서 데이터베이스 열기 및 닫기를 건너 뛰었습니다. 데이터베이스에 값을 삽입하는 메소드를 호출 할 곳을 뒤따 랐습니다. 당신은 당신이 독특한 찾고하지 않는 경우에만 이름 값

2를 자동 증가로 id 필드를 만들고 삽입보다 고유 ID)를 찾는 경우

public static final String indexNo = "index_no"; 
public static final String user_id = "userId"; 
public static final String company_id = "companyId"; 
public static final String user_name = "username"; 
public static final String client_Id = "clientId"; 
public static final String project_Id = "projectId"; 
public static final String report_Id = "reportId"; 
public static final String niv_1 = "niv1"; 
public static final String niv_2 = "niv2"; 
public static final String work_type_id = "workTypeId"; 
public static final String time_type_id = "timeTypeId"; 
public static final String date_id = "dateId"; 
public static final String month_id = "monthId"; 
public static final String year_id = "yearId"; 
public static final String hourS = "hours"; 
public static final String private_comment = "privateComment"; 
public static final String Ncomment = "comment"; 
public static final String mod_flag = "modFlag"; 
public static final String new_flag = "newFlag"; 
public static final String open_flag = "openFlag"; 
public static final String delete_flag = "deleteFlag"; 

private static final String DATABASE_NAME = "CopernicusDB.sqlite"; 
private static final String DATABASE_TABLE = "TimeReportTable"; 
private static final int DATABASE_VERSION = 1; 

private final Context context; 
private static DatabaseHelper DBHelper; 
private static SQLiteDatabase db; 
private static String TAG = "##---SecondActivityUserHelper---##"; 
public SecondActivityUserHelper(Context ctx) 
{ 
this.context = ctx; 
DBHelper = new DatabaseHelper(context); 
} 

private static class DatabaseHelper extends SQLiteOpenHelper{ 

    public DatabaseHelper(Context context) { 
     super(context, DATABASE_NAME, null, DATABASE_VERSION); 
     Log.v(TAG,"The DatabaseHelper method "); 
    } 

    public long insertIntoDatabase(String companyId,String username, String dateId, 
      String clientId,String projectId,String niv1,String niv2,String workTypeId,String timeTypeId, 
      String hours,String comment,String privateComment,String openFlag,String reportId) 
      { 
      ContentValues initialValues = new ContentValues(); 
      initialValues.put(company_id, companyId); 
      initialValues.put(user_name, username); 
      initialValues.put(date_id,dateId); 
      initialValues.put(client_Id,clientId); 
      initialValues.put(project_Id,projectId); 
      initialValues.put(niv_1,niv1); 
      initialValues.put(niv_2,niv2); 
      initialValues.put(work_type_id,workTypeId); 
      initialValues.put(time_type_id,timeTypeId); 
      initialValues.put(hourS, hours); 
      initialValues.put(Ncomment, comment); 
      initialValues.put(private_comment,privateComment); 
      initialValues.put(open_flag, openFlag); 
      initialValues.put(report_Id,reportId); 
      Log.v(TAG, "Inserted into database sucessfully"); 
      return db.insert(DATABASE_TABLE, null, initialValues); 
      } 

}

useradapter.openDatabase(); 
long id = dB.insertIntoDatabase( newcompanyid,newusername,newdate, 
newClientId,newprojectId,newniv1,newniv2,newworktypeid,newtimetypeid, 
newhours,newcomment,newprivatecomment,newopen,newreportid); 
          useradapter.closeDatabase(); 
+0

사미르 : 이해하지 못 했습니까 ?? – Vinoth

답변

4

데이터를 보유 할 개체를 만듭니다. 데이터가 존재하는 경우 ClientData
, 당신의 삽입 문을 실행하기 전에 데이터베이스

public List<ClientData> selectAll() { 
    List<ClientData> list = new ArrayList<ClientData>(); 
    Cursor cursor = this.myDataBase.query(TABLE_NAME, new String[] { "userID, clientName" }, 
    null, null, null, null, null); 
    if (cursor.moveToFirst()) { 
     do { 
      list.add(new ClientData(cursor.getString(0), cursor.getString(1))); 
     } while (cursor.moveToNext()); 
    } 
    if (cursor != null && !cursor.isClosed()) { 
     cursor.close(); 
    } 
    return list; 
} 

에서 모든 데이터를 가져 오는 방법을 만들고 모든 데이터를 가져 오기 한 후 확인 :

if (!list.contains(clientData)) { 
    executeInsert(); 
} 

내가 SQLite는 지원하는 경우 확실하지 않다 저장 프로 시저를 만들지 만 그렇게 할 경우 저장 프로 시저를 작성할 수 있습니다. 귀하의 예제 테이블에서

1

1) 삽입 된 값을 데이터베이스의 기존 값과 비교하는 것보다 배열에있는이 테이블 저장소의 모든 데이터를 검색하는 것보다

1

: 당신은 다음 (가 SQLiteOpenHelper 사용)와 테이블 (즉, 당신이 유일한 원하는 경우) 당신이 고유로 이름을 설정할 수 있습니다를 만들

.

String createPlayerTable = "create table " + 
       TIME_REPORT + 
       " (" + 
       USER_ID + " integer primary key autoincrement not null," + 
       CLIENT_NAME + " text not null," +      
       "UNIQUE("+CLIENT_NAME+")"+ 
       ");"; 

다음 삽입에 insertIntoDatabase 방법은 던질 수

db.insertOrThrow(TIME_REPORT, null, initialValues); 

대신

db.insert(TIME_REPORT, null, initialValues); 

이의 사용하십시오 SQLiteConstraintException 그래서 당신은 시도/캐치를 추가해야합니다.

희망이 있기를 바랍니다.

관련 문제