What is SQLiteOpenHelper in Android?
What is SQLiteOpenHelper?
SQLiteOpenHelper is an abstract helper class provided by the Android SDK to manage database creation and version
control.
It simplifies the use of SQLite databases by handling tasks such as:
- Creating the database for the first time
- Managing database upgrades (when schema changes)
- Opening the database for read/write operations
Key Responsibilities
1. Create a new database if it doesn't already exist.
2. Upgrade or downgrade the database schema when the version changes.
3. Provide a convenient method to get a readable/writable database object.
Constructor Syntax
public SQLiteOpenHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version)
Parameters:
- context: Application context
- name: Name of the database file (e.g., "mydb.db")
- factory: Used to create cursor objects, usually set to null
- version: Database version (integer)
Important Methods to Override
1. onCreate(SQLiteDatabase db): Called only once when the database is first created. Used to define table creation
(CREATE TABLE) statements.
2. onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion): Called when the database version is increased.
Used to modify schema.
3. onDowngrade(SQLiteDatabase db, int oldVersion, int newVersion): Called when the version number is decreased.
What is SQLiteOpenHelper in Android?
Rarely used.
Example
public class MyDatabaseHelper extends SQLiteOpenHelper {
public MyDatabaseHelper(Context context) {
super(context, "MyDatabase.db", null, 1);
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL("CREATE TABLE users (id INTEGER PRIMARY KEY, name TEXT)");
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("DROP TABLE IF EXISTS users");
onCreate(db);
How to Use It
MyDatabaseHelper dbHelper = new MyDatabaseHelper(context);
SQLiteDatabase db = dbHelper.getWritableDatabase(); // or getReadableDatabase()
Summary
- SQLiteOpenHelper reduces boilerplate code and manages database lifecycle.
- It ensures your app has a clean, reusable, and upgradable local storage solution.
- Best practice: Use Room on top of SQLiteOpenHelper for modern projects.