Where does Android store SQLite's database version?

AndroidDatabaseAndroid Sqlite

Android Problem Overview


I am unable to find where Android stores the database version within the SQLite database file. Where exactly is the database version stored?

Android Solutions


Solution 1 - Android

You can read the version using android.database.sqlite.SQLiteDatabase.getVersion().

Internally, this method executes the SQL statement "PRAGMA user_version". I got that from the Android source code.

In the database file, the version is stored at byte offset 60 in the database header of the database file, in the field 'user cookie'.

Solution 2 - Android

If someone is looking for the java code to read version from file:

private static int getDbVersionFromFile(File file) throws Exception
{
    RandomAccessFile fp = new RandomAccessFile(file,"r");
    fp.seek(60);
    byte[] buff = new byte[4];
    fp.read(buff, 0, 4);
    return ByteBuffer.wrap(buff).getInt();
}

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionbhupsView Question on Stackoverflow
Solution 1 - AndroidThomas MuellerView Answer on Stackoverflow
Solution 2 - AndroidRafal MalekView Answer on Stackoverflow