# Migration

Artifact: [androidx.room:room-runtime](https://developer.android.com/jetpack/androidx/releases/room) [View Source](https://cs.android.com/search?q=file:androidx/room/migration/Migration.+class:androidx.room.migration.Migration) Added in [2.0.0](https://developer.android.com/jetpack/androidx/releases/room#2.0.0)

*** ** * ** ***


```
public abstract class Migration
```

<br />

*** ** * ** ***

Base class for a database migration.

Each migration can move between 2 versions that are defined by `https://developer.android.com/reference/androidx/room/migration/Migration#(kotlin.Int,kotlin.Int)` and `https://developer.android.com/reference/androidx/room/migration/Migration#(kotlin.Int,kotlin.Int)`.

A migration can handle more than 1 version (e.g. if you have a faster path to choose when going version 3 to 5 without going to version 4). If Room opens a database at version 3 and latest version is 5, Room will use the migration object that can migrate from 3 to 5 instead of 3 to 4 and 4 to 5.

If there are not enough migrations provided to move from the current version to the latest version, Room will might clear the database and recreate if destructive migrations are enabled.

## Summary

| ### Public fields |
|---|---|
| `final int` | `https://developer.android.com/reference/androidx/room/migration/Migration#endVersion()` |
| `final int` | `https://developer.android.com/reference/androidx/room/migration/Migration#startVersion()` |

| ### Public constructors |
|---|
| `https://developer.android.com/reference/androidx/room/migration/Migration#Migration(kotlin.Int,kotlin.Int)(int startVersion, int endVersion)` Creates a new migration between `https://developer.android.com/reference/androidx/room/migration/Migration#(kotlin.Int,kotlin.Int)` and `https://developer.android.com/reference/androidx/room/migration/Migration#(kotlin.Int,kotlin.Int)` inclusive. |

| ### Public methods |
|---|---|
| `void` | `https://developer.android.com/reference/androidx/room/migration/Migration#migrate(androidx.sqlite.SQLiteConnection)(@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/sqlite/SQLiteConnection connection)` Should run the necessary migrations. |
| `void` | `https://developer.android.com/reference/androidx/room/migration/Migration#migrate(androidx.sqlite.db.SupportSQLiteDatabase)(@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/sqlite/db/SupportSQLiteDatabase db)` Should run the necessary migrations. |

## Public fields

### endVersion

Added in [2.0.0](https://developer.android.com/jetpack/androidx/releases/room#2.0.0)

```
public final int endVersion
```

### startVersion

Added in [2.0.0](https://developer.android.com/jetpack/androidx/releases/room#2.0.0)

```
public final int startVersion
```

## Public constructors

### Migration

Added in [2.0.0](https://developer.android.com/jetpack/androidx/releases/room#2.0.0)

```
public Migration(int startVersion, int endVersion)
```

Creates a new migration between `https://developer.android.com/reference/androidx/room/migration/Migration#(kotlin.Int,kotlin.Int)` and `https://developer.android.com/reference/androidx/room/migration/Migration#(kotlin.Int,kotlin.Int)` inclusive.

## Public methods

### migrate

Added in [2.7.0](https://developer.android.com/jetpack/androidx/releases/room#2.7.0)

```
public void migrate(@NonNull SQLiteConnection connection)
```

Should run the necessary migrations.

This function is already called inside a transaction and that transaction might actually be a composite transaction of all necessary `Migration`s.

| Parameters |
|---|---|
| `@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/sqlite/SQLiteConnection connection` | The database connection |

### migrate

Added in [2.0.0](https://developer.android.com/jetpack/androidx/releases/room#2.0.0)

```
public void migrate(@NonNull SupportSQLiteDatabase db)
```

Should run the necessary migrations.

The Migration class cannot access any generated Dao in this method.

This method is already called inside a transaction and that transaction might actually be a composite transaction of all necessary `Migration`s.

This function is only called when Room is configured without a driver. If a driver is set using `https://developer.android.com/reference/androidx/room/RoomDatabase.Builder#setDriver(androidx.sqlite.SQLiteDriver)`, then only the version that receives a `https://developer.android.com/reference/androidx/sqlite/SQLiteConnection` is called.

| Parameters |
|---|---|
| `@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/sqlite/db/SupportSQLiteDatabase db` | The database instance |

| Throws |
|---|---|
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-not-implemented-error/index.html` | if migrate(SQLiteConnection) is not overridden. |