Sign Up

Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.

Have an account? Sign In

Have an account? Sign In Now

Sign In

Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.

Sign Up Here

Forgot Password?

Don't have account, Sign Up Here

Forgot Password

Lost your password? Please enter your email address. You will receive a link and will create a new password via email.

Have an account? Sign In Now

You must login to ask a question.

Forgot Password?

Need An Account, Sign Up Here

Please briefly explain why you feel this question should be reported.

Please briefly explain why you feel this answer should be reported.

Please briefly explain why you feel this user should be reported.

Sign InSign Up

The Archive Base

The Archive Base Logo The Archive Base Logo

The Archive Base Navigation

  • SEARCH
  • Home
  • About Us
  • Blog
  • Contact Us
Search
Ask A Question

Mobile menu

Close
Ask a Question
  • Home
  • Add group
  • Groups page
  • Feed
  • User Profile
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Buy Points
  • Users
  • Help
  • Buy Theme
  • SEARCH
Home/ Questions/Q 8720353
In Process

The Archive Base Latest Questions

Editorial Team
  • 0
Editorial Team
Asked: June 13, 20262026-06-13T07:01:14+00:00 2026-06-13T07:01:14+00:00

I have this database using sqlite, and I’m having problem with closing the cursor

  • 0

I have this database using sqlite, and I’m having problem with closing the cursor its saying that Application did not close the cursor or database object that was opened here here’s the logcat

10-18 08:40:56.354: E/Cursor(331): android.database.sqlite.DatabaseObjectNotClosedException: Application did not close the cursor or database object that was opened here
10-18 08:40:56.354: E/Cursor(331):  at android.database.sqlite.SQLiteCursor.<init>(SQLiteCursor.java:210)
10-18 08:40:56.354: E/Cursor(331):  at android.database.sqlite.SQLiteDirectCursorDriver.query(SQLiteDirectCursorDriver.java:53)
10-18 08:40:56.354: E/Cursor(331):  at android.database.sqlite.SQLiteDatabase.rawQueryWithFactory(SQLiteDatabase.java:1345)
10-18 08:40:56.354: E/Cursor(331):  at android.database.sqlite.SQLiteDatabase.queryWithFactory(SQLiteDatabase.java:1229)
10-18 08:40:56.354: E/Cursor(331):  at android.database.sqlite.SQLiteDatabase.query(SQLiteDatabase.java:1184)
10-18 08:40:56.354: E/Cursor(331):  at android.database.sqlite.SQLiteDatabase.query(SQLiteDatabase.java:1264)
10-18 08:40:56.354: E/Cursor(331):  at standard.internet.marketing.mymovingfriend.SQLHandler.checkMove(SQLHandler.java:1094)
10-18 08:40:56.354: E/Cursor(331):  at standard.internet.marketing.mymovingfriend.ListMovingNames$3.onKey(ListMovingNames.java:98)
10-18 08:40:56.354: E/Cursor(331):  at android.view.View.dispatchKeyEvent(View.java:3735)
10-18 08:40:56.354: E/Cursor(331):  at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:788)
10-18 08:40:56.354: E/Cursor(331):  at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:788)
10-18 08:40:56.354: E/Cursor(331):  at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:788)
10-18 08:40:56.354: E/Cursor(331):  at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:788)
10-18 08:40:56.354: E/Cursor(331):  at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchKeyEvent(PhoneWindow.java:1667)
10-18 08:40:56.354: E/Cursor(331):  at com.android.internal.policy.impl.PhoneWindow.superDispatchKeyEvent(PhoneWindow.java:1102)
10-18 08:40:56.354: E/Cursor(331):  at android.app.Activity.dispatchKeyEvent(Activity.java:2063)
10-18 08:40:56.354: E/Cursor(331):  at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchKeyEvent(PhoneWindow.java:1643)
10-18 08:40:56.354: E/Cursor(331):  at android.view.ViewRoot.deliverKeyEventToViewHierarchy(ViewRoot.java:2471)
10-18 08:40:56.354: E/Cursor(331):  at android.view.ViewRoot.handleFinishedEvent(ViewRoot.java:2441)
10-18 08:40:56.354: E/Cursor(331):  at android.view.ViewRoot.handleMessage(ViewRoot.java:1735)
10-18 08:40:56.354: E/Cursor(331):  at android.os.Handler.dispatchMessage(Handler.java:99)
10-18 08:40:56.354: E/Cursor(331):  at android.os.Looper.loop(Looper.java:123)
10-18 08:40:56.354: E/Cursor(331):  at android.app.ActivityThread.main(ActivityThread.java:4627)
10-18 08:40:56.354: E/Cursor(331):  at java.lang.reflect.Method.invokeNative(Native Method)
10-18 08:40:56.354: E/Cursor(331):  at java.lang.reflect.Method.invoke(Method.java:521)
10-18 08:40:56.354: E/Cursor(331):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
10-18 08:40:56.354: E/Cursor(331):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
10-18 08:40:56.354: E/Cursor(331):  at dalvik.system.NativeStart.main(Native Method)

this issue’s been bugging me for 3 days.

here some relevant code:

public class SQLHandler {

    public static final String KEY_MOVENAME = "movename";
    public static final String KEY_ID1 = "_id";
    public static final String KEY_ID5 = "_id";
    public static final String KEY_MOVEDATE = "movedate";
    public static final String KEY_TOTALMOVEWEIGHT = "totalmoveweight";
    public static final String KEY_TOTALITEM = "totalitem";

    private static final String DATABASE_NAME = "mymovingfriend";
    private static final int DATABASE_VERSION = 1;

    public static final String KEY_LISTITEMNAME = "listitemname";
    public static final String KEY_LISTITEMWEIGHT = "listitemweight";
    public static final String KEY_LISTITEMROOM = "listitemroom";

    private static final String DATABASE_TABLE1 = "movingname";
    private static final String DATABASE_TABLE5 = "listitem";

    public static final String CREATE_TABLE_1 = "CREATE TABLE " + DATABASE_TABLE1 + " (" + 
            KEY_ID1 + " INTEGER PRIMARY KEY AUTOINCREMENT," + 
            KEY_MOVEDATE + " TEXT NOT NULL, " + 
            KEY_TOTALMOVEWEIGHT + " TEXT NOT NULL, " + 
            KEY_TOTALITEM + " INTEGER NOT NULL, " +
            KEY_MOVENAME + " TEXT NOT NULL);";

    public static final String CREATE_TABLE_2 = "CREATE TABLE " + DATABASE_TABLE2 + " (" + 
            KEY_ID2 + " INTEGER PRIMARY KEY AUTOINCREMENT," + 
            KEY_ROOMMOVEHOLDER + " TEXT NOT NULL, " + 
            KEY_ROOMWEIGHT + " TEXT NOT NULL, " + 
            KEY_ROOM + " TEXT NOT NULL);";

    public static final String CREATE_TABLE_5 = "CREATE TABLE " + DATABASE_TABLE5 + " (" + 
            KEY_ID5 + " INTEGER PRIMARY KEY AUTOINCREMENT," + 
            KEY_LISTITEMNAME + " TEXT NOT NULL, " + 
            KEY_LISTITEMWEIGHT + " TEXT NOT NULL, " +
            KEY_LISTITEMROOM + " TEXT NOT NULL);";

    private DbHelper ourHelper;
    private final Context ourContext;
    private SQLiteDatabase ourDatabase;

    private static class DbHelper extends SQLiteOpenHelper{

        public DbHelper(Context context) {
            super(context, DATABASE_NAME, null, DATABASE_VERSION);
            // TODO Auto-generated constructor stub
        }

        @Override
        public void onCreate(SQLiteDatabase db) {
            // TODO Auto-generated method stub
            db.execSQL(CREATE_TABLE_1);
            db.execSQL(CREATE_TABLE_2);
            db.execSQL(CREATE_TABLE_3);
            db.execSQL(CREATE_TABLE_4);
            db.execSQL(CREATE_TABLE_5);
        }

        @Override
        public void onUpgrade(SQLiteDatabase db, int oldversion, int newversion) {
            // TODO Auto-generated method stub
            db.execSQL("DROP TABLE IF EXISTS " + DATABASE_TABLE1);
            db.execSQL("DROP TABLE IF EXISTS " + DATABASE_TABLE2);
            db.execSQL("DROP TABLE IF EXISTS " + DATABASE_TABLE3);
            db.execSQL("DROP TABLE IF EXISTS " + DATABASE_TABLE4);
            db.execSQL("DROP TABLE IF EXISTS " + DATABASE_TABLE5);
            onCreate(db);
        }
    }

    public SQLHandler(Context c){
        ourContext = c;
    }

    public SQLHandler open() throws SQLException{
        ourHelper = new DbHelper(ourContext);
        ourDatabase = ourHelper.getWritableDatabase();
        return this;
    }

    public void close(){
        ourDatabase.close();
        ourHelper.close();
    }

    public long createMove(String smovename){
        ContentValues cv = new ContentValues();
        cv.put(KEY_MOVENAME, smovename);
        cv.put(KEY_MOVEDATE, "Not yet set");
        cv.put(KEY_TOTALMOVEWEIGHT, "0");
        cv.put(KEY_TOTALITEM, 0);
        return ourDatabase.insert(DATABASE_TABLE1, null, cv);
    }

    public void createList(){

        String[] sroom = new String[]{"Kitchen", "Bedroom", "Dinning Room"};
        String[] sitem = new String[]{"Dishwasher", "Bed", "Table"};
        String[] sweight = new String[]{"40", "25", "15"};

        for (int i = 0; i < sroom.length; i++) {
            cv.put(KEY_LISTITEMROOM, sroom[i]);
            cv.put(KEY_LISTITEMNAME, sitem[i]);
            cv.put(KEY_LISTITEMWEIGHT, sweight[i]);
            ourDatabase.insert(DATABASE_TABLE5, null, cv);
        }
    }

    public void setMoveDate(String smovedate, String smovename){
        ContentValues cv = new ContentValues();
        cv.put(KEY_MOVEDATE, smovedate);
        ourDatabase.update(DATABASE_TABLE1, cv, KEY_MOVENAME + "='" + smovename + "'", null);
    }

    public void setMoveWeight(String smoveweight, String smovename){
        ContentValues cv = new ContentValues();
        cv.put(KEY_TOTALMOVEWEIGHT, smoveweight);
        ourDatabase.update(DATABASE_TABLE1, cv, KEY_MOVENAME + "='" + smovename + "'", null);
    }

    public void setTotalItem(String smovename, int imoveitem){
        ContentValues cv = new ContentValues();
        cv.put(KEY_TOTALITEM, imoveitem);
        ourDatabase.update(DATABASE_TABLE1, cv, KEY_MOVENAME + "='" + smovename + "'", null);
    }

    public void renameRoom(String movename, String roomname, String currentroom){
        ContentValues cv = new ContentValues();
        cv.put(KEY_ROOM, roomname);
        ourDatabase.update(DATABASE_TABLE2, cv, KEY_ROOMMOVEHOLDER + "='" + movename + "'" + " AND " + KEY_ROOM + "='" + currentroom + "'", null);
    }

    public void setRoomWeight(String sroomweight, String smovename, String sroomname){
        ContentValues cv = new ContentValues();
        cv.put(KEY_ROOMWEIGHT, sroomweight);
        ourDatabase.update(DATABASE_TABLE2, cv, KEY_ROOMMOVEHOLDER + "='" + smovename + "'" + " AND " + KEY_ROOM + "='" + sroomname + "'", null);
    }

    public long addRooms(String sroommoveholder, String sroom){
        ContentValues cv = new ContentValues();
        cv.put(KEY_ROOMMOVEHOLDER, sroommoveholder);
        cv.put(KEY_ROOM, sroom);
        cv.put(KEY_ROOMWEIGHT, "0");
        return ourDatabase.insert(DATABASE_TABLE2, null, cv);
    }

    public long addNewItems(String sitemmoveholder, String sroomholder, String sitemname, String sitemvalue, String sitemweight){
        ContentValues cv = new ContentValues();
        cv.put(KEY_ITEMMOVEHOLDER, sitemmoveholder);
        cv.put(KEY_ROOMHOLDER, sroomholder);
        cv.put(KEY_ITEMNAME, sitemname);
        cv.put(KEY_ITEMVALUE, sitemvalue);
        cv.put(KEY_ITEMWEIGHT, sitemweight);
        return ourDatabase.insert(DATABASE_TABLE3, null, cv);
    }

    public void updateItems(String sitemmoveholder, String sroomholder, String sitemname, String sitemvalue, String sitemweight){
        ContentValues cv = new ContentValues();
        cv.put(KEY_ITEMVALUE, sitemvalue);
        cv.put(KEY_ITEMWEIGHT, sitemweight);
        ourDatabase.update(DATABASE_TABLE3, cv, KEY_ITEMMOVEHOLDER + "='" + sitemmoveholder + "'" + " AND " + 
                KEY_ROOMHOLDER + "='" + sroomholder + "'" + " AND " + KEY_ITEMNAME + "='" + sitemname + "'", null);
    }

    public Cursor getMove(){
        String[] columns = new String[]{KEY_ID1, KEY_MOVENAME};

        Cursor c = null;
        try {
            c = ourDatabase.query(DATABASE_TABLE1, columns, null, null, null, null, null);
        } catch (Exception e) {
            c.close();
        }
        return c;
    }

    public String getTotalWeight(String m) throws SQLException{
        String[] columns = new String[]{KEY_ID1, KEY_MOVENAME, KEY_MOVEDATE, KEY_TOTALMOVEWEIGHT};

        Cursor c = null;
        try {
            c = ourDatabase.query(DATABASE_TABLE1, columns, KEY_MOVENAME + "= '" + m + "'", null, null, null, null);
            if (c != null) {
                c.moveToFirst();
                String totalWeight = c.getString(3);
                return totalWeight;
            }
        } catch (Exception e) {
            c.close();
        }
        return null;

    }

    public String getTotalWeightLBS(String m) throws SQLException{
        String[] columns = new String[]{KEY_ID1, KEY_MOVENAME, KEY_MOVEDATE, KEY_TOTALMOVEWEIGHT};

        Cursor c = null;
        try {
            c = ourDatabase.query(DATABASE_TABLE1, columns, KEY_MOVENAME + "= '" + m + "'", null, null, null, null);
            if (c != null) {
                c.moveToFirst();
                int x = Integer.parseInt(c.getString(3)) * 7;
                String totalWeight = "" + x + " lbs";
                return totalWeight;
            }
        } catch (Exception e) {
            c.close();
        }
        return null;

    }

    public String getDateMove(String md){
        String[] columns = new String[]{KEY_ID1, KEY_MOVENAME, KEY_MOVEDATE};

        Cursor c = null;try {
            c = ourDatabase.query(DATABASE_TABLE1, columns, KEY_MOVENAME + "= '" + md + "'", null, null, null, null);

            if (c != null) {
                c.moveToFirst();
                String moveDate = c.getString(2);
                return moveDate;
            }
        } catch (Exception e) {
            c.close();
        }
        return null;
    }

    public ArrayList<String> loadRooms(String mn) throws SQLException{
        String[] columns = new String[]{KEY_ID2, KEY_ROOMMOVEHOLDER, KEY_ROOM};

        ArrayList<String> array = new ArrayList<String>();

        Cursor c = null;
        try {
            c = ourDatabase.query(DATABASE_TABLE2, columns,KEY_ROOMMOVEHOLDER + "='" + mn + "'", 
                    null, null, null, null);
            int iroom = c.getColumnIndex(KEY_ROOM);

            for (c.moveToFirst(); !c.isAfterLast(); c.moveToNext()) {
                array.add(c.getString(iroom));
            }
        } catch (Exception e) {
            c.close();
        }
        return array;
    }

    public void deleteMove(String m) throws SQLException{
        ourDatabase.delete(DATABASE_TABLE1, KEY_MOVENAME + "='" + m + "'", null);
        ourDatabase.delete(DATABASE_TABLE2, KEY_ROOMMOVEHOLDER + "='" + m + "'", null);
        ourDatabase.delete(DATABASE_TABLE3, KEY_ITEMMOVEHOLDER + "='" + m + "'", null);
        ourDatabase.delete(DATABASE_TABLE4, KEY_TODOMOVE + "='" + m + "'", null);
    }

    public ArrayList<String> getitems(){
        String[] columns = new String[]{KEY_ID5, KEY_ITEMNAME};
        ArrayList<String> items;
        items = new ArrayList<String>();

        Cursor c = null;
        try {
            c = ourDatabase.query(DATABASE_TABLE5, columns, null, null, null, null, null);

            for (c.moveToFirst(); !c.isAfterLast(); c.moveToNext()) {
                items.add(c.getString(1));
            }
        } catch (Exception e) {
            c.close();
        }

        return items;
    }

    public ArrayList<String> getitemweight(){
        String[] columns = new String[]{KEY_ID5, KEY_ITEMWEIGHT};
        ArrayList<String> items = new ArrayList<String>();

        Cursor c = null;
        try {
            c = ourDatabase.query(DATABASE_TABLE5, columns, null, null, null, null, null);
            for (c.moveToFirst(); !c.isAfterLast(); c.moveToNext()) {
                items.add(c.getString(1));
            }
        } catch (Exception e) {
            c.close();
        }

        return items;
    }

    public ArrayList<String> getitemclass(){
        String[] columns = new String[]{KEY_ID5, KEY_LISTITEMROOM};
        ArrayList<String> items = new ArrayList<String>();

        Cursor c = null;
        try {
            c = ourDatabase.query(DATABASE_TABLE5, columns, null, null, null, null, null);

            for (c.moveToFirst(); !c.isAfterLast(); c.moveToNext()) {
                items.add(c.getString(1));
            }
        } catch (Exception e) {
            c.close();
        }

        return items;
    }

}
  • 1 1 Answer
  • 0 Views
  • 0 Followers
  • 0
Share
  • Facebook
  • Report

Leave an answer
Cancel reply

You must login to add an answer.

Forgot Password?

Need An Account, Sign Up Here

1 Answer

  • Voted
  • Oldest
  • Recent
  • Random
  1. Editorial Team
    Editorial Team
    2026-06-13T07:01:17+00:00Added an answer on June 13, 2026 at 7:01 am

    You’re not closing cursor in getDateMove, getTotalWeightLBS, loadRooms,…

    Everywhere where cursor is not needed anymore close it. In those methods use try-finally, it will guarantee to execute code in finally block even when thrown exception occur.

    Change code in your methods from this:

    try{
      // get data from cursor
    } catch (Exception e) {
        c.close();
    }
    

    to this:

    try {
       // get data from cursor
    } catch (Exception e) {
       // exception handling
    } finally {
       if(c != null){
           c.close();
       }
    } 
    
    • 0
    • Reply
    • Share
      Share
      • Share on Facebook
      • Share on Twitter
      • Share on LinkedIn
      • Share on WhatsApp
      • Report

Sidebar

Related Questions

I have a database file that is generated on a PC using Sqlite. This
I have this function on my controller (Im using CodeIgniter) that reads the database,
I'm using an sqlite database in my app. I have this dbhelper class in
Here's my problem, I have one sqlite memory database by using QSql . I
I have doing some POC in Ruby-on-Rails and using sqlite database, while doing this
I have to insert 8000+ records into a SQLite database using Django's ORM. This
I'm using SQLite.cs wrapper for helping me with the database and I have this
I'm writing a WinForms database application using SQLite and C#. I have a sqlite
I have created one application which using sqlite database.For first some time i have
I have a problem with inserting data into SQLite database using QSqlTableModel. The table

Explore

  • Home
  • Add group
  • Groups page
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Users
  • Help
  • SEARCH

Footer

© 2021 The Archive Base. All Rights Reserved
With Love by The Archive Base

Insert/edit link

Enter the destination URL

Or link to existing content

    No search term specified. Showing recent items. Search or use up and down arrow keys to select an item.