当前位置: 首页 > 知识库问答 >
问题:

如何在Android中查找SQLite数据库中具有文本或VARCHAR类型的特定列的内存占用(大小)?

颜畅
2023-03-14
public class DataAdapterText
{
Context c;
    SQLiteDatabase db;
    DBHelperText helper;

    public DataAdapterText(Context c) {
        this.c = c;
        helper=new DBHelperText(c);
    }
public void getSize(int id)
{

    SQLiteStatement byteStatement = db.compileStatement("SELECT LENGTH(txtitle) FROM TX_Table WHERE tid='"+id+"'");
    long bytes = byteStatement.simpleQueryForLong();

    long kilobytes = 1024,
            megabytes = kilobytes * kilobytes,
            gigabytes = megabytes * kilobytes,
            terabytes = gigabytes * kilobytes;
if (bytes<kilobytes)
{
    Toast.makeText(c, bytes+" B", Toast.LENGTH_SHORT).show();
}
else if (bytes>=kilobytes && bytes<megabytes)
{
    Toast.makeText(c, bytes+" KB", Toast.LENGTH_SHORT).show();
}
else if (bytes>=megabytes && bytes<gigabytes)
{
    Toast.makeText(c, bytes+" MB", Toast.LENGTH_SHORT).show();
}
else if (bytes>=gigabytes && bytes<terabytes)
{
    Toast.makeText(c, bytes+" GB", Toast.LENGTH_SHORT).show();
}

}
}


public class TextNotes extends AppCompatActivity
{
   @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_text_notes);
 DataAdapterText dataAdapterText=new DataAdapterText(TextNotes.this);
        dataAdapterText.openDB();
        dataAdapterText.getSize(Id);//here Id is the ID of specific item when clicked by the user and is coming from the Recycler adapter. No issue with this ID!
        dataAdapterText.closeDB();
}
2019-05-18 14:19:25.893 13286-13286/com.example.unifiednotesnew E/asset: AssetManager::addSystemOverlays delete oidmap
2019-05-18 14:19:39.943 13286-13286/com.example.unifiednotesnew E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.example.unifiednotesnew, PID: 13286
    java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.unifiednotesnew/com.example.unifiednotesnew.TextNotes}: android.database.sqlite.SQLiteDoneException
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2750)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2811)
        at android.app.ActivityThread.-wrap12(ActivityThread.java)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1528)
        at android.os.Handler.dispatchMessage(Handler.java:102)
        at android.os.Looper.loop(Looper.java:154)
        at android.app.ActivityThread.main(ActivityThread.java:6316)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:872)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:762)
     Caused by: android.database.sqlite.SQLiteDoneException
        at android.database.sqlite.SQLiteConnection.nativeExecuteForLong(Native Method)
        at android.database.sqlite.SQLiteConnection.executeForLong(SQLiteConnection.java:604)
        at android.database.sqlite.SQLiteSession.executeForLong(SQLiteSession.java:790)
        at android.database.sqlite.SQLiteStatement.simpleQueryForLong(SQLiteStatement.java:107)
        at com.example.unifiednotesnew.Adapter.DataAdapterText.getSize(DataAdapterText.java:193)
        at com.example.unifiednotesnew.TextNotes.onCreate(TextNotes.java:125)
        at android.app.Activity.performCreate(Activity.java:6757)
        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1119)
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2703)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2811) 
        at android.app.ActivityThread.-wrap12(ActivityThread.java) 
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1528) 
        at android.os.Handler.dispatchMessage(Handler.java:102) 
        at android.os.Looper.loop(Looper.java:154) 
        at android.app.ActivityThread.main(ActivityThread.java:6316) 
        at java.lang.reflect.Method.invoke(Native Method) 
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:872) 
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:762) 

共有1个答案

翟志新
2023-03-14

您的问题是没有选择任何行,也没有要返回的值。

即:-

SQLiteDoneException

........
SQLiteStatement byteStatement = db.compileStatement("SELECT LENGTH(txtitle) FROM TX_Table WHERE tid='"+id+"'");
long bytes = 0;
try {
    bytes = byteStatement.simpleQueryForLong();
} catch (SQLiteDoneException e) {
    
}

long kilobytes = 1024,
........
public long getColumnLengthById(String table, String column, long id, String idcolumn) {
    long rv = 0;
    String rv_column = "LEN";
    String[] columns = new String[]{"length(" + column + ") AS " + rv_column};
    String whereclause = idcolumn + "=?";
    String[] whereargs = new String[]{String.valueOf(id)};
    SQLiteDatabase db = this.getWritableDatabase();
    Cursor csr = db.query(table,columns,whereclause,whereargs,null,null,null);
    while (csr.moveToNext()) {
        rv = rv + csr.getLong(csr.getColumnIndex(rv_column));
    }
    csr.close();
    return rv;
}
 类似资料:
  • 在我的SQLite数据库管理器中,我可以查询以下内容: 此查询返回2012年7月名为“tripmileagetable”的表中里程表列的总和,但我想在android查询中编写此代码。 但是我不知道如何在database.query()方法中建立这个查询,有人能帮忙吗?

  • 问题内容: 在我的SQLite数据库管理器中,我可以查询以下内容: 这个查询从2012年7月的名为“ tripmileagetable”的表中返回了里程表总和,但是我想在android查询中编写此代码。 但是我不知道如何在database.query()方法中建立此查询,有什么可以帮助吗? 问题答案:

  • 问题内容: 我想知道如何检查数据库中的特定表(例如:myTable)中是否存在特定列(例如:日期)。 我已经阅读了此答案,该答案提供了一个查询,该查询导致另一个查询。 但是我需要的是结果。 更新1 如何在C#应用程序中做到这一点? 也许使用或其他? 问题答案: 感谢所有提供解决方案并收集了一些答案的人,我提出了自己的解决方案版本。也许这不是最好的解决方案,但是至少我不需要额外的dll来添加引用或处

  • 问题内容: 我正在使用fileBrowser在手机上查找文件,但是我想向用户显示我的应用程序可以打开的所有文件,然后用户选择一个。就像音乐播放器一样,它不仅可以显示用户所在文件夹中的歌曲,还可以显示手机,SD卡和内存中的所有歌曲。 问题答案: 在列出文件时使用文件名过滤器。以下示例列出了给定目录中的所有mp3文件(注意-以下代码未对之下的所有文件夹进行递归处理)-

  • 问题内容: 我在使用Java在Selenium中定位span元素时遇到问题。 HTML看起来像: 我已经尝试了以下方法,但是没有运气: 和 和 以及其他一些类似的尝试。您能指出我执行此操作的最佳方法吗?就目前而言,我在日食中不断收到“无法定位元素”错误。 问题答案: 一切看起来都不错,只是语法上有些错误。你失踪了 正确的如下: 要么 要么 或者您可以用作:- 使用上面的任何一个通过定位器,您都可以

  • 问题内容: 我正在尝试制作简单的Java代码,以检查MySQL DB中是否存在表和/或列。我应该使用Java代码进行检查还是生成一个SQL查询字符串并执行以进行检查? 编辑- @ aleroot- 我尝试使用您的代码,如下所示。运行以下代码时,我看不到任何表或列。我只看到这个 我的数据库有很多数据库,表和列。我不知道为什么该程序可以正常工作。 问题答案: 要检查表是否存在,可以按以下方式使用Dat