在无限循环中不断从数据库中检索数据

时间:2017-01-31 16:34:33

标签: android mysql android-studio android-sqlite android-database

我使用名为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.这样,下一轮无限循环可以停止触发新线程,直到满足条件。什么是问题?我的代码真的更新了新值吗?或者我每次更新新值时都需要引用数据库。

1 个答案:

答案 0 :(得分: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