2011-10-19 97 views
3

我有一个数据库,我将在解析JSON响应后填充项目。如何检查数据库中是否存在这些值,并防止再次插入?如何检查Android中的数据库中是否已经存在一个值

例如,数据库的名称:Exicom.sqlite

表的名称:TimeReport

领域在数据库:用户ID,CLIENTNAME

我使用SQLite在android系统。

感谢您的输入

这是我的HELPER类。我跳过了打开和关闭数据库,因为它太长了。随后我将调用该方法将值插入到数据库中。

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)如果你在寻找的唯一ID不是让你的ID字段自动递增,并插入唯一的名字值

2)如果你不寻找独特比检索数组中的此表格存储的所有数据要比将您插入的值与数据库中的现有值进行比较

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所以你必须添加一个try/catch。

希望这是你所需要的。

相关问题