# Migration

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

*** ** * ** ***


```
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/room3/migration/Migration#startVersion()` and `https://developer.android.com/reference/androidx/room3/migration/Migration#endVersion()`.

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/room3/migration/Migration#endVersion()` |
| `final int` | `https://developer.android.com/reference/androidx/room3/migration/Migration#startVersion()` |

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

| ### Public methods |
|---|---|
| `abstract void` | `https://developer.android.com/reference/androidx/room3/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. |

## Public fields

### endVersion

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

```
public final int endVersion
```

### startVersion

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

```
public final int startVersion
```

## Public constructors

### Migration

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

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

Creates a new migration between `https://developer.android.com/reference/androidx/room3/migration/Migration#startVersion()` and `https://developer.android.com/reference/androidx/room3/migration/Migration#endVersion()` inclusive.

## Public methods

### migrate

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

```
public abstract 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 |