Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How does a SQLite cursor work internally?

I'm working on a project that requires storing bitmaps on a table. These bitmaps are used in data adapters to be displayed on lists. This table can possibly contain more than 1000 images. The reason I'm currently not storing to file is because of how fast I can read and write images to db.

What I'm essentially looking for is to understand the limitations of SQLite's cursor. How is the cursor loaded into memory? Does it place the query results in memory or does it create some type of temp read/write file? I don't want to run into issues where querying a large datasets causes a device to run out of memory.

like image 444
Jona Avatar asked Apr 29 '12 22:04

Jona


People also ask

What does cursor do in SQLite?

Returns the numbers of rows in the cursor. Get the database that this cursor is associated with. This function is called every time the cursor is successfully scrolled to a new position, giving the subclass a chance to update any state it may have.

Is cursor a function in sqlite3 module?

The sqlite3. Cursor class is an instance using which you can invoke methods that execute SQLite statements, fetch data from the result sets of the queries. You can create Cursor object using the cursor() method of the Connection object/class.

Which method is used to get data from cursor?

The get() methods return the data from the column in the row which can then be used by the app. The Cursor class contains the following methods for retrieving data from a row: byte[] Cursor. getBlob(int columnIndex): Returns the value as a byte[]

What is the use of cursor in Android?

Introduction to Cursor in Android The basic purpose of a cursor is to point to a single row of the result fetched by the query. We load the row pointed by the cursor object. By using cursor we can save lot of ram and memory. Here, we pass the table name, column name only then we receive the cursor.


1 Answers

If I recall, it will keep however many results cached in memory it can. It should stay below the soft heap limit, usually. It is an advisory limit, so it will prefer to go over the limit than return SQL_NOMEM.

I don't believe it writes to disk for any caching mechanisms. So long as each image can fit in memory, and they aren't in the indexes, it shouldn't be an issue.

I am not an android programmer, for what it's worth. Some of these things could have been customized.

As background, sqlite_step is the cursor in the default library. I am unaware if android has implemented it's own mechanisms. You can find some general information on their page about dynamic memory allocation.

like image 170
Tom Kerr Avatar answered Oct 27 '22 10:10

Tom Kerr