正确的Sqlite数据库大小计算

时间:2016-10-24 02:42:27

标签: android sqlite android-sqlite

我有一个应用程序,需要将许多字符串写入Sqlite数据库。在测试期间,我注意到抛出致命异常错误:“由于db大小总是大于2000000 ,因此无法分配游标窗口”,如下面的链接所示,因为Sqlite数据库对象大小增长到超过2兆字节。

CursorWindow can not be allocated because of database size more than 2000000 bytes 在下面的方法中,cursor.moveToFirst()始终抛出异常:

public boolean doesBusinessExist(Business_4s business)
{
    //
    boolean businessExists = false;
    //

    if(business != null) {

        //
        String query = "Select " + COLUMN_ID + " FROM " + TABLE_BUSINESS + " WHERE " + COLUMN_ID + " =  \"" + business.get_id() + "\"";

        SQLiteDatabase db = this.getWritableDatabase();
        Cursor cursor = db.rawQuery(query, null);
        //

        try {
            //
            if (cursor != null && cursor.moveToFirst()) {
                cursor.moveToFirst();

                //want to know how many business are there
                int cnt = cursor.getCount();

                //return true
                if (cnt > 0) {
                    businessExists = true;
                }

            } else {
                businessExists = false;
            }
            //
        } finally {
            cursor.close();
            db.close();
        }
    }

    //
    //final return
    return businessExists;
    //

}

所以我决定编写一些代码,当db接近2兆字节时不再添加更多数据,再次研究如何计算sqlite db size 并找到两种方法:< / p>

方法1:

    File f = getDatabasePath("businessDB.db");
    long dbSize = f.length();

此方法中的dbSize值为:53248字节

方法2:

    dbHandler = new MyDBHandler_bus_4s(getApplicationContext(),null);
    SQLiteDatabase db_ =  dbHandler.getWritableDatabase();
    long size = new File(db_.getPath()).length();
此方法中的

大小值为:53248字节

鉴于db大小计算为53248字节,我的计算中缺少一些东西,因为我确定此时db大小接近2000000字节,那么在android中计算Sqlite数据库大小的正确方法是什么? / p>

1 个答案:

答案 0 :(得分:0)

对于未来的旅行者:

根据我的观察,某个软件包的所有 SQLite DB的总大小不能超过2MB(至少默认情况下)。我的应用程序有5个SQLite数据库,随着时间的推移,这些数据库的总大小往往会超过2 MB。 实施的解决方法是使用Alarm Manger设置清理服务,以定期维护数据库中的记录数。

我是怎么知道的?在有根电话上安装this app并导航到本地&gt;设备&gt;数据&gt;数据&gt; [应用包名称]&gt;数据库

对于每个数据库,还有另一个带有.db-journal扩展名的文件,该文件的大小通常比实际数据库小,但也占用了一些空间。

Supplementary image