# 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)

*** ** * ** ***

Common/AllAndroid/JVMNative/C/iOS
- Cmn

  ```
  abstract class Migration
  ```

*** ** * ** ***

Base class for a database migration.

Each migration can move between 2 versions that are defined by `https://developer.android.com/reference/kotlin/androidx/room/migration/Migration#(kotlin.Int,kotlin.Int)` and `https://developer.android.com/reference/kotlin/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 constructors |
|---|---|
| `https://developer.android.com/reference/kotlin/androidx/room/migration/Migration#Migration(kotlin.Int,kotlin.Int)(startVersion: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html, endVersion: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html)` Creates a new migration between `https://developer.android.com/reference/kotlin/androidx/room/migration/Migration#(kotlin.Int,kotlin.Int)` and `https://developer.android.com/reference/kotlin/androidx/room/migration/Migration#(kotlin.Int,kotlin.Int)` inclusive. | Cmn android N |

| ### Public functions |
|---|---|---|
| `open https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html` | `https://developer.android.com/reference/kotlin/androidx/room/migration/Migration#migrate(androidx.sqlite.SQLiteConnection)(connection: https://developer.android.com/reference/kotlin/androidx/sqlite/SQLiteConnection)` Should run the necessary migrations. | Cmn android N |
| `open https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html` | `https://developer.android.com/reference/kotlin/androidx/room/migration/Migration#migrate(androidx.sqlite.db.SupportSQLiteDatabase)(db: https://developer.android.com/reference/kotlin/androidx/sqlite/db/SupportSQLiteDatabase)` Should run the necessary migrations. | android |

| ### Public properties |
|---|---|---|
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html` | `https://developer.android.com/reference/kotlin/androidx/room/migration/Migration#endVersion()` | Cmn android N |
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html` | `https://developer.android.com/reference/kotlin/androidx/room/migration/Migration#startVersion()` | Cmn android N |

## Public constructors

### Migration

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

```
Migration(startVersion: Int, endVersion: Int)
```

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

## Public functions

### migrate

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

```
open fun migrate(connection: SQLiteConnection): Unit
```

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 |
|---|---|
| `connection: https://developer.android.com/reference/kotlin/androidx/sqlite/SQLiteConnection` | The database connection |

### migrate

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

```
open fun migrate(db: SupportSQLiteDatabase): Unit
```

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/kotlin/androidx/room/RoomDatabase.Builder#setDriver(androidx.sqlite.SQLiteDriver)`, then only the version that receives a `https://developer.android.com/reference/kotlin/androidx/sqlite/SQLiteConnection` is called.

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

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

## Public properties

### endVersion

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

```
val endVersion: Int
```

### startVersion

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

```
val startVersion: Int
```