Данные заменены вместо вставки с использованием SQLite на Android - PullRequest
0 голосов
/ 27 июля 2011

Я пишу приложение для Android, которое требует, чтобы записи добавлялись одна за другой.Когда пользователь вводит правильный контакт, его профиль обновляется подключенным компонентом к контакту.Но мое приложение обновляется вместо вставки или добавления новой записи.Вот мой код, пожалуйста, помогите мне

//Database
    SQLiteDatabase db=mydbhelper.getWritableDatabase();
    //Openining the database

        db=this.openOrCreateDatabase("mm.db",MODE_PRIVATE,null);
        try
        {
            //Retriving the pin from db
            Cursor c=db.query("pin_table",null,null,null,null,null,null);
            c.moveToFirst();
            boolean matched=false;
            while(c.isAfterLast()== false)
            {
                String hsname=c.getString(c.getColumnIndex("name"));
                String dpass=c.getString(c.getColumnIndex("pin"));
                int id=c.getInt(c.getColumnIndex("_id"));
                if(epass.equals(dpass))
                {

                    ContentValues value = new ContentValues();
                    value.put("reg_hs",id);
                    //Inserting into the table 
                    db.execSQL("INSERT INTO hereg(reg_hs) VALUES("+id+");");

                    //db.insert("registered", null,value);
                    Toast.makeText(this.getBaseContext(),"Successfully added "+ hsname,Toast.LENGTH_SHORT).show();
                    matched=true;
                    finish();
                    break;
                }
                c.moveToNext();
            }
            if(!matched)
                Toast.makeText(this.getBaseContext(),"Please enter the correct Password",Toast.LENGTH_SHORT).show();                
            c.close();
        }           
        catch(Exception e)
        {
            Log.e("Error","Error",e);
        }
        finally
        {
            if(db!=null)
            {
                db.close();

            }
        }
}

Я использовал как execSql, так и db.insert (прокомментировал), давая тот же результат.Это из-за цикла while?

Моя проблема в том, что все записи удаляются и отображается только запись, а в нее записывается последнее значение: (

Ответы [ 2 ]

0 голосов
/ 27 июля 2011

Нет необходимости заканчивать (), как я сказал в комментарии, который завершит всю деятельность.

Вы можете переписать оператор в цикле while следующим образом:

while(c.isAfterLast()== false || matched==true)
{

}

, который остановит цикл при обнаружении совпадения (и прекратит цикл при isAfterLast(), конечно)

0 голосов
/ 27 июля 2011

Вы не должны использовать finish () без крайней необходимости.

Если необходимо, я предлагаю синхронизировать два метода (вставку и завершение) с объектом блокировки.

Когдавставка заканчивается, вызовите lockObject.notify (), и это позволит завершить действие.

Надеюсь, это поможет!

РЕДАКТИРОВАТЬ:

Еще одна мысльВы можете попробовать использовать AsyncTask с doInBackGround (), содержащим доступ к базе данных, и onPostExecute (), вызывающий activity.finish ().Это немного более явный способ решения проблемы.

...