使用游标检索一行数据(来自一个id的所有条目)

时间:2016-01-04 04:18:04

标签: android

我开始在Android应用程序中首次访问sqlite数据库,到目前为止我可以添加到数据库,我可以更新数据库中的条目,我可以在数据库中显示每一位数据,但是我是什么我坚持的是如何获得一个条目(一个id及其所有相关行)。

要检索我使用此代码的所有行

数据库助手:

public Cursor getAllData() {
    SQLiteDatabase db = this.getWritableDatabase();
    Cursor res = db.rawQuery("select * from "+table_name,null);
    return res;
}

并在我的活动课程中调用它

public void viewallFunction() {
        Cursor res = characterDB.getAllData();

        if(res.getCount() == 0) {
            showmessage("Error","no Data");
            return;
        } else {
            StringBuffer buffer = new StringBuffer();

            while (res.moveToNext()) {
                buffer.append("Internal ID : " + res.getString(0) + "\n");
                buffer.append("Player Name : " + res.getString(1) + "\n");
                buffer.append("Character Name : " + res.getString(2) + "\n");
                buffer.append("NickName : " + res.getString(3) + "\n");
                buffer.append("Alignment : " + res.getString(4) + "\n");
                buffer.append("Race : " + res.getString(5) + "\n");
            }

            showmessage("Data", buffer.toString());
        }
    }

当被调用时效果很好(实际上有81个条目,所以res.getString(0)一直到res.getString(80)为这篇文章修剪的函数)

根据我的理解*

Cursor res = db.rawQuery("select * from " + table_name, null);

表示所有列。

所以我在数据库助手中创建了这个方法:

public Cursor getOneData(int id) {
    SQLiteDatabase db = this.getWritableDatabase();
    Cursor res = db.rawQuery("select "+id+" from "+table_name,null);
    return res;
}

并用

调用它
public void getOneId(int id) {
    Cursor res = characterDB.getOneData(id);

    if(res.getCount() == 0){showmessage("Error","no Data");
        return;}
    else{
        showmessage("test","retreived id "+res.getString(0)+" which is "+res.getString(1));
        displaySheet(res.getString(0),
                res.getString(1),
                res.getString(2),
                res.getString(3),
                res.getString(4),
                res.getString(5),
        );}
}

再次为这篇文章修剪,显示表然后处理数据,但没有任何反应,我没有得到任何消息(我确定是不可能的,一个或另一个应该显示!)我做没有任何错误,只是没有任何反应,起初我认为该方法甚至没有解雇,但我把它重写为:

public void getOneId(int id){
    showmessage("Message","id is "+id);
}

并且测试消息显示完美

让我完全难过,几个小时的谷歌搜索让我更加困惑,我看到的每个例子都非常专门针对正在制作的应用而定制,并且看起来没有像我的代码一样,如果所有显示方法都没有工作我会说啊哈哈有我的问题,但是我的所有显示方法都有效......而且这就是我在过去3或4天内学到的东西(天啊,请告诉我,我做错了)< / p>

所以,我做错了什么?

我是如何将一行检索为一组字符串?

作为参考,表格中的第一列设置为

ID INTEGER PRIMARY KEY AUTOINCREMENT

不确定这是否相关

编辑:数据库的结构如下:

1 "david" "zarr" "the great" "choatic" "human"
2 "george" "tod" "toddy" "lawful" "elf"

即:

int string string string string string

列名为:

ID   PLAYERNAME   CHARNAME   NICKNAME   RACE

我想要实现的目标是使用那个id行来检索字符串(然后我将edittext更改为,我知道那部分,但它正在获取那些我无法理解的字符串)

理想情况下,我只想对数据库说,给我ID为1的行中的所有字符串和数据库,在这里说你是他们的“大卫”“zarr”“伟大的”“choatic”“人类”< / p>

好的答案来自皮蒂

将数据库geto一个方法更改为:

    public Cursor getOneData(int id){
    SQLiteDatabase db = this.getWritableDatabase();
    Cursor res = db.rawQuery("select * from "+table_name+" WHERE ID='" + id + "'",null);
    return res;
}

并更改了我用来调用它的方法:

    public void getOneId(int id){
    Cursor res = characterDB.getOneData(id);
    if(res.getCount() == 0){showmessage("Error","no Data");
        return;}
    else{


        if (res != null && res.moveToFirst()); do {
        showmessage("test","retreived id "+res.getString(0)+" which is "+res.getString(1));
        displaySheet(res.getString(0),
                res.getString(1),
                res.getString(2),
                res.getString(3),
                res.getString(4),
                res.getString(5),
        ); } while (res.moveToNext()); }

}

1 个答案:

答案 0 :(得分:1)

您正在查询中获取Id列,并且您想要整行一行使用此:

public Cursor getOneData(int id){
SQLiteDatabase db = this.getWritableDatabase();
Cursor res = db.rawQuery("select * from "+table_name+" WHERE id='" + id + "'",null);
if (res != null && res.moveToFirst()) { 
do { 
    //Call Your Function
   } 
while (res.moveToNext()); 
}
 return res;
 }