0

私は次のクエリを実行しています:

String q = "select " + MySQLiteHelper.COLUMN_ID + ", "
        + MySQLiteHelper.COLUMN_TASK + ", "
        + MySQLiteHelper.COLUMN_PARENT + ", count(*) from "
        + MySQLiteHelper.TABLE_TASKS + " where "
        + MySQLiteHelper.COLUMN_ID + " = " + insertId + " group by "
        + MySQLiteHelper.COLUMN_ID + ", " + MySQLiteHelper.COLUMN_TASK
        + ", " + MySQLiteHelper.COLUMN_PARENT;
Cursor cursor = database.rawQuery(q, null);

取得したデータを次のように読み取ると、次のようになります。

task.setId(cursor.getLong(0));
task.setTask(cursor.getString(1));
task.setParent(cursor.getLong(2));
task.setChildren(cursor.getInt(3));

次のエラーが発生します。

03-15 22:15:06.078: E/AndroidRuntime(31426):
    java.lang.IllegalStateException:
    Couldn't read row 0, col 3 from CursorWindow.
    Make sure the Cursor is initialized correctly before accessing data from it.

行を削除すると

task.setChildren(cursor.getInt(3));

正常に動作します。

誰かがここで何が間違っているのか、そしてそれを修正する方法を教えてもらえますか?

4

2 に答える 2

3

この行を置き換えてみてください

+ MySQLiteHelper.COLUMN_PARENT + ", count(*) from "

+ MySQLiteHelper.COLUMN_PARENT + ", count(*) as total from "

編集:また、置き換えてみてください

task.setChildren(cursor.getInt(3));

task.setChildren((int)cursor.getLong(3));

または多分

task.setChildren(Integer.parseInt(cursor.getString(3)));
于 2013-03-16T04:44:32.147 に答える
1

カーソルから3列に直接アクセスしようとしていますが、3番目の列はカウントであり、その列のエイリアスを指定しなかったため、このエラーが発生します。列名のエイリアスを入力してから、次のようにアクセスしてみてください。

この行を置き換えます

   + MySQLiteHelper.COLUMN_PARENT + ", count(*) from "

    + MySQLiteHelper.COLUMN_PARENT + ", count(*) as total from "
于 2013-03-16T04:49:14.997 に答える