2

我正在尝试从我的数据库中获取信息并将其放入字符串中以在屏幕上打印。我想我可以使用下面的代码来做到这一点,但它给出了一些关于光标的信息,而不是光标内的信息。

datasource = new DataBaseHelper(this);
datasource.open();
Cursor c = datasource.getAllGoals();
startManagingCursor(c);
String g = c.toString();
goal.setText(g);
datasource.close();
4

2 回答 2

1

游标可以被认为是指向一些基础数据的指针。在游标对象上运行c.toString()将打印Cursor其字符串表示的默认类的实现(一个符号字符@和对象哈希码的无符号十六进制表示),这不是您想要的。

要检索基础数据库数据,您将需要调用c.getString(columnIndex)( source ),或者该特定列索引所需的任何列数据类型。

这是一个从源代码修改的示例:

假设您创建了一个表

private static final String DATABASE_CREATE = 
            "create table comments ( "
            + "_id integer primary key autoincrement, "
            + "comment text not null);";

并且您的getAllGoals函数返回一个光标,该光标指向关于 _id的数据comment。现在您只想显示有关该comment列的详细信息。所以你必须运行c.getString(1)。假设您的getAllGoals函数返回一个仅指向有关comment列的数据的游标。现在你必须运行c.getString(0).

我建议您下载提供的示例中的源代码,并了解如何从游标中检索数据。

编辑:

    public List<Comment> getAllComments() {
        List<Comment> comments = new ArrayList<Comment>();

        Cursor cursor = database.query(MySQLiteHelper.TABLE_COMMENTS,
                allColumns, null, null, null, null, null);

        cursor.moveToFirst();
        while (!cursor.isAfterLast()) {//retrieve data from multiple rows
            Comment comment = cursorToComment(cursor);
            comments.add(comment);
            cursor.moveToNext();
        }
        // Make sure to close the cursor
        cursor.close();
        return comments;
    }

    private Comment cursorToComment(Cursor cursor) {
        Comment comment = new Comment();
        comment.setId(cursor.getLong(0));
        comment.setComment(cursor.getString(1));
        return comment;
    }

来源

于 2012-05-26T16:53:13.540 回答
0
openDataBase();
Cursor c = myDataBase.rawQuery("SELECT * FROM tb_aa_City where City_Name = '"+cityname+"'", null);
if (c.getCount() > 0) {
    c.moveToFirst();
    seqid = c.getString(4);
    System.out.println("In DB..getSequenceID..."+seqid);
    }
    c.close();
    myDataBase.close();
    SQLiteDatabase.releaseMemory();
于 2012-05-26T17:03:58.810 回答