Reputation: 2374
I am trying to make a query here, but I am getting an error. I am not getting what exactly my mistake here, please provide suggestions and help me to come out of this issue. All suggestions are welcome. Thanks in advance.
My SQL Query:
public User getSubTaskNumber () {
db = helper.getReadableDatabase();
User user = null;
Cursor cursor = null;
String[] columns = {SQLiteHelper.UID, String.valueOf((SQLiteHelper.TASK)), String.valueOf((SQLiteHelper.SUB_TASK))};
String selectQuery = " SELECT count(*) FROM " +SQLiteHelper.TABLE_USER + " WHERE " + SQLiteHelper.TASK + " =? " ;
cursor = db.rawQuery(selectQuery, null);
if (cursor != null && cursor.moveToFirst()) {
{
user = new User((Integer.parseInt(cursor.getString(0))), (Integer.parseInt(cursor.getString(1))));
}
cursor.close();
db.close();
}
return user;
}
I am setting the fetched values in one of my activities as shown below:
User user = db.getSubTaskNumber();
subTaskNumber.setText(user.getSubTask());
My User Table schema:
public static final String CREATE_TABLE_USER = " CREATE TABLE " + TABLE_USER + " ( " + UID + " INTEGER PRIMARY KEY AUTOINCREMENT, " +
TASK + " INTEGER, " + SUB_TASK + " INTEGER, " + " FOREIGN KEY (" + TASK + ") REFERENCES " + TABLE_NAME + " (" + UID + " )" +
" FOREIGN KEY (" + SUB_TASK + ") REFERENCES " + TABLE_NAME_CHILD + " (" + UIDCHILD + ") );";
ADB trace:
03-09 16:39:03.091 2080-2080/com.ms.t.tms E/CursorWindow﹕ Failed to read row 0, column 1 from a CursorWindow which has 1 rows, 1 columns.
03-09 16:39:03.132 2080-2080/com.ms.t.tms D/AndroidRuntime﹕ Shutting down VM
03-09 16:39:03.142 2080-2080/com.ms.t.tms E/AndroidRuntime﹕ FATAL EXCEPTION: main
Process: com.ms.t.tms, PID: 2080
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.ms.t.tms/com.ms.t.tms.DetailView}: java.lang.IllegalStateException: Couldn't read row 0, col 1 from CursorWindow. Make sure the Cursor is initialized correctly before accessing data from it.
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2298)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2360)
at android.app.ActivityThread.access$800(ActivityThread.java:144)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1278)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5221)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)
Caused by: java.lang.IllegalStateException: Couldn't read row 0, col 1 from CursorWindow. Make sure the Cursor is initialized correctly before accessing data from it.
at android.database.CursorWindow.nativeGetString(Native Method)
at android.database.CursorWindow.getString(CursorWindow.java:438)
at android.database.AbstractWindowedCursor.getString(AbstractWindowedCursor.java:51)
at com.ms.t.tms.SQLiteDataBaseAdapter.getSubTaskNumber(SQLiteDataBaseAdapter.java:282)
at com.ms.t.tms.DetailView.onCreate(DetailView.java:88)
at android.app.Activity.performCreate(Activity.java:5933)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1105)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2251)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2360)
at android.app.ActivityThread.access$800(ActivityThread.java:144)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1278)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5221)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)
UPDATED QUERY:
public User getSubTaskNumber () {
db = helper.getReadableDatabase();
User user = null;
Cursor cursor = null;
String[] columns = {SQLiteHelper.UID, String.valueOf((SQLiteHelper.TASK)), String.valueOf((SQLiteHelper.SUB_TASK))};
String selectQuery = " SELECT * FROM " +SQLiteHelper.TABLE_USER + " WHERE " + SQLiteHelper.TASK + " =? " ;
cursor = db.rawQuery(selectQuery, null);
if (cursor.getCount() > 0)
cursor.moveToFirst();
user = new User((Integer.parseInt(cursor.getString(0))), (Integer.parseInt(cursor.getString(1))));
cursor.close();
db.close();
return user;
}
Upvotes: 0
Views: 1576
Reputation: 47807
You should change
String selectQuery = " SELECT count(*) FROM " +SQLiteHelper.TABLE_USER + " WHERE " + SQLiteHelper.TASK + " =? " ;
to
String selectQuery = " SELECT * FROM " +SQLiteHelper.TABLE_USER + " WHERE " + SQLiteHelper.TASK + " =? " ;
cursor.getCount();
This will give you total (affected row count
).
Then you can check
if(cursor.getCount()>0){
cursor.moveToFirst();
}
Upvotes: 2