Come verificare se un valore già esiste nel database in Android

Ho un database che posso popolare con gli elementi dopo aver analizzato una risposta JSON. Come posso verificare se i valori sono già presenti nel database e impedire l'inserimento di nuovo?

Per esempio. Nome del database: Exicom.sqlite

  • Scorri su Distriggers per RecyclerView
  • lo studio android non è in grado di connettersi ai dispositivi di debug
  • Il servizio non si riavvia dopo che "Clear Memory" + appWidget si blocca
  • Dove chiudere con looper?
  • Come impostare correttamente l'orientamento della camera Android?
  • come faccio a lavorare con showmodal in FMX?
  • Nome della tabella: TimeReport

    Campi in Database: userID, clientName

    Sto usando SQLite in android.

    Grazie per il tuo contributo

    Questa è la mia class HELPER. Ho saltato l'apertura e la chiusura del database perché sarà troppo lunga. Seguito da where chiamerò il metodo per inserire valori nel database.

    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(); 

  • Android TabHost solo all'interno di un frammento (NavigationDrawer)
  • Android Studio: Come aggiornare dopo l'aggiunta di file?
  • Android disegnabile con background e gradiente a sinistra
  • Il button Play / Pause di Android MediaController e Seekbar non si aggiornano
  • Utilizzo di un selettore per un MenuItem in ActionBar
  • Trasferimento di dati USB
  • 3 Solutions collect form web for “Come verificare se un valore già esiste nel database in Android”

    Crea un object che tratterà i tuoi dati, ad esempio. ClientData
    Creare un metodo per recuperare tutti i dati dal database

     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; } 

    Prima di eseguire le istruzioni di inserimento, recuperare tutti i dati e verificare se esistono dati:

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

    Non sono sicuro se SQLite support procedure memorizzate, ma se lo fa, puoi anche scrivere una stored procedure per quella stessa.

    1) se stai cercando l'id unica che fai il tuo field id come incremento automatico e inserisci solo il valore del nome

    2) se non stai cercando unica di recuperare tutti i dati di questo negozio di tabelle nell'arrays che confrontare il valore inserito con il valore esistente nella base di dati

    Nella tabella di esempio:

    Quando si crea la tabella è ansible impostare il proprio nome come univoco (se è quello che si desidera univoco) con quanto segue (utilizzando un SQLiteOpenHelper ).

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

    Quindi inserisci inserire il metodo insertIntoDatabase

     db.insertOrThrow(TIME_REPORT, null, initialValues); 

    invece di

     db.insert(TIME_REPORT, null, initialValues); 

    Questo può lanciare un SQLiteConstraintException modo da aggiungere una prova / cattura.

    Spero che questo è ciò di cui hai bisogno.

    L'Android è un fan Android di Google, tutto su telefoni Android, Android Wear, Android Dev e applicazioni Android Games e così via.