簡體   English   中英

在SQLite Database Android中選擇

[英]Selecting in SQLite Database Android

每當我創建一個新數據庫並向其中插入數據時,我都可以選擇插入的數據,但是第二次我插入表並嘗試選擇它時,它將顯示第一個數據本身。

這是onClickListener的代碼(從表中選擇):

mydb = openOrCreateDatabase("Countz_DB",MODE_PRIVATE,null);

mnew.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            c = mydb.rawQuery("Select * from Countz",null);
            if (c.moveToFirst()){
                name = c.getString(0);
                desc = c.getString(1);
                Snackbar.make(v, "Name:"+name+" Desc:"+desc, Snackbar.LENGTH_LONG).show();
            }
        }
    });

這是我用於將值插入表中的代碼:

public void InsertintoCount(){
    String sqlc = "INSERT INTO Countz VALUES('"+name+"','"+desc+"','"+x+"','"+cDT+"');";
    newdb.execSQL(sqlc);
    }

那是因為您的光標總是移到click事件的第一個位置。 嘗試執行以下操作:

mnew.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        c = mydb.rawQuery("Select * from Countz",null);
        if (c.moveToLast()){
            name = c.getString(0);
            desc = c.getString(1);
            Snackbar.make(v, "Name:"+name+" Desc:"+desc, Snackbar.LENGTH_LONG).show();
        }
    }
});

如果要遍歷表中的所有行,則::

mnew.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        c = mydb.rawQuery("Select * from Countz",null);
        if(c>0) {
        c.moveToFirst();
        do {
            name = c.getString(0);
            desc = c.getString(1);
            Snackbar.make(v, "Name:"+name+" Desc:"+desc, Snackbar.LENGTH_LONG).show();
       } while(c.moveToNext());
        }
    }
});

之后,您將獲得所有過帳的價值。

如果要使用最近插入的值,則必須在插入操作后返回rowId,然后使用查詢“ SELECT * FROM table WHERE id =“ + id;”從數據庫中獲取行。

但是處理數據庫事務的更好方法是創建一個處理程序類,然后從您需要的任何位置訪問它。

遵循本教程:: SQLite數據庫示例

那是因為您只讀取一次結果。 Cursor有幾行,您必須經過它們。

您必須遍歷Cursor

請嘗試以下操作:

if (c.moveToFirst()){
    do {
            name = c.getString(0);
            desc = c.getString(1);
            Snackbar.make(v, "Name:"+name+" Desc:"+desc, Snackbar.LENGTH_LONG).show();
    } while (c.moveToNext());
}

告訴我們是否可行。

嘗試這個

if (c.moveToFirst()){
    do {
            name = c.getString(0);
            desc = c.getString(1);
            Snackbar.make(v, "Name:"+name+" Desc:"+desc, Snackbar.LENGTH_LONG).show();
    } while(c.moveToNext());
}

第二次我插入表格並嘗試選擇它時,它顯示了第一個數據本身。

那是因為您要選擇第一個條目本身。

if (c.moveToFirst()){
    name = c.getString(0);
    desc = c.getString(1);
    Snackbar.make(v, "Name:"+name+" Desc:"+desc, Snackbar.LENGTH_LONG).show();
}

注意c.moveToFirst() 這將帶您到光標的第一項。 如果要最后輸入,請使用c.moveToLast()

或者,如果您想查看所有條目,請執行以下操作:

if (c.moveToFirst()){
    while (!c.isAfterLast) {
        name = c.getString(0);
        desc = c.getString(1);
        Snackbar.make(v, "Name:"+name+" Desc:"+desc, Snackbar.LENGTH_LONG).show();
        c.moveToNext();
    }
}

c.isAfterLast()告訴光標是否指向最后一行之后的位置(這是您要中斷循環的點)。

暫無
暫無

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

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