簡體   English   中英

在無限循環中不斷從數據庫中檢索數據

[英]Constantly retrieve data from database in a infinite loop

我用一個名為flagTable的表創建了一個數據庫,這個表只有兩個字段,分別是id(自動增量)和一個整數字段。 接下來,在我的程序中,我有一個按鈕可以觸發線程啟動。 當線程啟動時,它不斷從數據庫中檢索數據,並檢查值,如果值等於 1,則它將觸發另一個新線程,如下所示:

 private class statusOfStrummingInAnotherDevice extends Thread {
    int value;
    public void run() {

        try{
            while(true){
                try{

                    if(flagCursor == null){
                        flagCursor = cdb1.getFlagAll();
                    }
                }catch(Exception e){break;}

                try{
                    Log.i("MAIN3ACTIVITY","getting status");
                    int size = cdb1.getSize(flagCursor);
                    Log.i("MAIN3ACTIVITY","SIZE is" + String.valueOf(xyz));
                    for(int i = 0 ; i < size ; i++){
                        flagCursor.moveToPosition(i);
                        Log.i("MAIN3ACTIVITY","getting status jkasdfasdf");
                        value = cdb1.getFlag();
                        if(value == 1){
                            Log.i("FLAGCURSOR=====>>>>","Succesful");
                            releasingNotes = new ReleasingNotes(IntendedChord);
                            releasingNotes.start();

                            //break;
                        }
                        cdb1.updateFlag(0);
                        Log.i("FLAGCURSOR=====>>>>",String.valueOf(value));
                    }
                    flagCursor = null;

                }catch(Exception e){break;}

                Log.i("MAIN3ACTIVITY","thread is sleeping");
                try {
                    Thread.sleep(1000);

                } catch (InterruptedException e) {
                    break;
                }

            }
        }catch(Exception e){

        }

    }
}

同時,從數據庫中檢索到的數據正在使用這個函數:

public Cursor getFlagAll(){
    return getReadableDatabase().rawQuery(
            "SELECT _ID, flag from flagTable", null);
}

並且,通過這種方法更新到數據庫的數據:

public int updateFlag(int i) {
        SQLiteDatabase db = this.getWritableDatabase();
        ContentValues contentValues = new ContentValues();
        contentValues.put("flag",i);
        return db.update("flagTable" , contentValues , "_ID" + "= ?",new String[]{String.valueOf(1)});

    }

現在,上面的代碼不會出錯,但是,從數據庫中檢索到的數據始終為 1,它會不斷觸發新函數。 在我上面的代碼中,我說如果值等於1,那么當前線程會觸發一個新線程開始,當它完成時,程序會將當前數據更新為0。這樣,下一輪無限循環可以停止觸發新線程,直到滿足條件。 這里有什么問題? 我的代碼真的更新了新值嗎? 或者每次更新新值時都需要引用數據庫。

對您的數據庫使用偵聽器。

使用SQLiteTransactionListener並在onCommit()做你的事情

這里有一些詳細指南: https : //developer.android.com/reference/android/database/sqlite/SQLiteTransactionListener.html

http://www.programcreek.com/java-api-examples/index.php?api=android.database.sqlite.SQLiteTransactionListener

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM