2016-07-21 5 views
0

Я создал простую базу данных в Android.but теперь проблема стоит перед мной. Я пробовал много раз, но не решил этого. Проблема заключается в том, когда я хочу вставить новую запись, если эта запись уже введена или присутствует уже, чтобы она показала мне тост, что эта запись уже существует. DataBase class.java:Как проверить, что запись уже существует в базе данных Android

public class DatabaseOperation extends SQLiteOpenHelper { 
public static final String DATABASE_NAME = "Student.db"; 
public static final String TABLE_NAME = "student_table"; 
public static final String COL_1 = "ID"; 
public static final String COL_2 = "NAME"; 
public static final String COL_3 = "PASS"; 
public static final String COL_4 = "CONTACT"; 
public static final String COL_5 = "NIC"; 
public static final String COL_6= "CONFIRM"; 

public DatabaseOperation(Context context) { 
    super(context, DATABASE_NAME, null, 1); 

} 

    @Override 
    public void onCreate(SQLiteDatabase db) { 
    db.execSQL("create table " + TABLE_NAME +" (ID INTEGER PRIMARY KEY 
     AUTOINCREMENT,NAME TEXT,PASS TEXT,CONFIRM TEXT,NIC INTEGER,CONTACT 
     INTEGER)");}  


    @Override 
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion){ 
    db.execSQL("DROP TABLE IF EXISTS "+TABLE_NAME); 
    onCreate(db); 
    } 
    public boolean insertData(String name,String pass,String confrim,String 
       contact,String nic) 
     { 
    SQLiteDatabase db = this.getWritableDatabase(); 
    ContentValues cv=new ContentValues(); 
    cv.put(COL_2,name); 
    cv.put(COL_3,pass); 
    cv.put(COL_6,confrim); 
    cv.put(COL_4,contact); 
    cv.put(COL_5,nic); 
    long result= db.insert(TABLE_NAME,null,cv); 
    if(result==-1) 
     return false; 
    else 
     return true; 

    } 
    public Cursor getAllData() 
    { 
    SQLiteDatabase db=this.getWritableDatabase(); 
    Cursor res=db.rawQuery("select * from "+TABLE_NAME,null); 
    return res; 
} 
public boolean updateData(String id,String name,String pass,String 
    confrim,String contact,String nic) 
{ 
    SQLiteDatabase db=this.getWritableDatabase(); 
    ContentValues cv=new ContentValues(); 
    cv.put(COL_1,id); 
    cv.put(COL_2,name); 
    cv.put(COL_3,pass); 
    cv.put(COL_6,confrim); 
    cv.put(COL_4,contact); 
    cv.put(COL_5,nic); 
    db.update(TABLE_NAME,cv, "ID= ?",new String[]{id}); 
    return true; 

} 
public Integer deletData(String id) 
{ 
    SQLiteDatabase db=this.getWritableDatabase(); 
    return db.delete(TABLE_NAME, "ID = ?",new String[] {id}); 
} 

} 

И это мой класс Регистрации

 registr.setOnClickListener(new View.OnClickListener() { 
     @Override 
      public void onClick(View view) { 



      boolean isInserted = myDb.insertData(name.getText().toString(), pass.getText().toString(), 
        confirm.getText().toString(), cont.getText().toString(), nic.getText().toString()); 


      if (isInserted == true) 
       Toast.makeText(getBaseContext(), "INSERTED", Toast.LENGTH_SHORT).show(); 
      else 
       Toast.makeText(getBaseContext(), "not inserted", Toast.LENGTH_SHORT).show(); 



      } 
     }); 
      next.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      linearLayout.setVisibility(View.INVISIBLE); 
     } 
     }); 
      load.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      Cursor res= myDb.getAllData(); 
      if(res.getCount()==0) 
      { 
       showMessage("error","no data found"); 
       //Toast.makeText(getBaseContext(),"NO daTA found",Toast.LENGTH_SHORT).show(); 

      } 
      StringBuffer buffer=new StringBuffer(); 
      while(res.moveToNext()) 
      { 
       buffer.append("id:"+res.getString(0)+"\n"); 
       buffer.append("name:"+res.getString(1)+"\n"); 
       buffer.append("nic:"+res.getString(4)+"\n"); 
       buffer.append("contact:"+res.getString(5)+"\n\n"); 
      } 
      showMessage("DATA",buffer.toString()); 

      } 
     }); 
      update.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
      boolean isUpdated=myDb.updateData(id.getText().toString(),name.getText().toString(),pass.getText().toString(),confirm.getText().toString(), 
        cont.getText().toString(),nic.getText().toString()); 

      if(isUpdated==true) 

       Toast.makeText(getBaseContext(),"updated",Toast.LENGTH_SHORT).show(); 

      else 
       Toast.makeText(getBaseContext(),"not updated",Toast.LENGTH_SHORT).show(); 

     } 
     }); 
     delet.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      Integer deletedRows=myDb.deletData(id.getText().toString()); 
      if(deletedRows > 0) 
       Toast.makeText(getBaseContext(),"data 
     deleted",Toast.LENGTH_SHORT).show(); 
      else 
       Toast.makeText(getBaseContext(),"not 
    deleted",Toast.LENGTH_SHORT).show(); 
     } 
     }); 


     } 
     public void showMessage(String title,String message) 
     { 
    AlertDialog.Builder builder=new AlertDialog.Builder(this); 
    builder.setCancelable(true); 
    builder.setTitle(title); 
    builder.setMessage(message); 
    builder.show(); 
    } 

    } 
+0

Что уникально в вашей таблице, кроме идентификатора? Если что-то существует как уникальное, то сначала проверьте, существует ли уникальный ключ или нет, затем выполните необходимую операцию. – Bharatesh

+0

Возможный дубликат [Android-sqlite, как проверить, существует ли запись] (http://stackoverflow.com/questions/20415309/android-sqlite-how-to-check-if-a-record-exists) – Bharatesh

ответ

2

Следующий фрагмент кода (метод) очень удобно с понятными параметрами, попробуйте проверить, если какая-то запись уже существует ... Следующий метод вернет true, когда запись уже присутствует в вашей базе данных. Этот метод должен быть объявлен в классе DatabaseOperations

public boolean checkIfRecordExist(String nameOfTable,String columnName,String columnValue) 
    { 
     try 
     { 
      objDatabase=this.getReadableDatabase(); 
      Cursor cursor=objDatabase.rawQuery("SELECT "+columnName+" FROM "+nameOfTable+" WHERE "+columnName+"='"+columnValue+"'",null); 
      if (cursor.moveToFirst()) 
      { 
       objDatabase.close(); 
       Log.d("Record Already Exists", "Table is:"+nameOfTable+" ColumnName:"+columnName); 
       return true;//record Exists 

      } 
      Log.d("New Record ", "Table is:"+nameOfTable+" ColumnName:"+columnName+" Column Value:"+columnValue); 
      objDatabase.close();   
     } 
     catch(Exception errorException) 
     { 
      Log.d("Exception occured", "Exception occured "+errorException); 
      objDatabase.close(); 
     } 
     return false; 
    } 

и называют его в вашей деятельности как

boolean recordExists= mydb.checkIfRecordExist(DatabaseOperations.TABLE_NAME ,DatabaseOperations.COL_1 ,valueToBeChecked) 
if(recordExists) 
{ 
    //do your stuff 
} 
+0

на самом деле я beginner ... так что можете ли вы мне позвонить, где можно поместить этот класс в класс базы данных или класс регистрации –

+0

В классе DatabaseOperations, уже объяснено в ответе. – nobalG

+0

, но как можно передать paramiter, который вы передаете, это имя таблицы String –

0

вызываете этот метод внутри кнопки Регистрация OnClickListener - Для того, чтобы подтвердить введенное имя и пароль уже существует в базе данных.

 /** 
* Used to check name and password is already in db. 
* 
* @param name 
* @param pass 
* @return true - name and password already exists in db. 
* false - name and password not exists in db. 
*/ 
public boolean dataAlreadyExists(String name, String pass) { 
    SQLiteDatabase db =...; 
    String query="SELECT COUNT(*) FROM " + TABLE_NAME + " WHERE NAME ="+name+ " PASS ="+pass+";"; 
long count = DatabaseUtils.queryNumEntries(db,query,null); 
    return count > 0; 
} 
+0

это показывает мне ошибку как –

+0

рядом с ",": синтаксическая ошибка (код 1):, при компиляции: выберите count (*) из student_table где NAME =?, PASS =? –

Смежные вопросы