# Database

Summary: [Methods](https://developer.android.com/reference/android/arch/persistence/room/Database#pubmethods) \| [Inherited Methods](https://developer.android.com/reference/android/arch/persistence/room/Database#inhmethods)  

# Database

| The `android.arch` Architecture Components packages are no longer maintained. They have been superseded by the corresponding [androidx.\*](https://developer.android.com/jetpack/androidx/migrate) packages. See [androidx.room.Database](https://developer.android.com/reference/androidx/room/Database) instead.


`
public


abstract
@interface
Database
`


`


implements

Annotation


`

|----------------------------------------|
| android.arch.persistence.room.Database |

<br />

*** ** * ** ***

Marks a class as a RoomDatabase.


The class should be an abstract class and extend
[RoomDatabase](https://developer.android.com/reference/android/arch/persistence/room/RoomDatabase).


You can receive an implementation of the class via
[Room.databaseBuilder](https://developer.android.com/reference/android/arch/persistence/room/Room#databaseBuilder(android.content.Context, java.lang.Class<T>, java.lang.String)) or
[Room.inMemoryDatabaseBuilder](https://developer.android.com/reference/android/arch/persistence/room/Room#inMemoryDatabaseBuilder(android.content.Context, java.lang.Class<T>)).


```
 // User and Book are classes annotated with @Entity.
 @Database(version = 1, entities = {User.class, Book.class})
 abstract class AppDatabase extends RoomDatabase {
     // BookDao is a class annotated with @Dao.
     abstract public BookDao bookDao();
     // UserDao is a class annotated with @Dao.
     abstract public UserDao userDao();
     // UserBookDao is a class annotated with @Dao.
     abstract public UserBookDao userBookDao();
 }
 
```
The example above defines a class that has 2 tables and 3 DAO classes that are used to access it. There is no limit on the number of [Entity](https://developer.android.com/reference/android/arch/persistence/room/Entity) or [Dao](https://developer.android.com/reference/android/arch/persistence/room/Dao) classes but they must be unique within the Database.


Instead of running queries on the database directly, you are highly recommended to create
[Dao](https://developer.android.com/reference/android/arch/persistence/room/Dao) classes. Using Dao classes will allow you to abstract the database communication in
a more logical layer which will be much easier to mock in tests (compared to running direct
sql queries). It also automatically does the conversion from `Cursor` to your application
classes so you don't need to deal with lower level database APIs for most of your data access.


Room also verifies all of your queries in [Dao](https://developer.android.com/reference/android/arch/persistence/room/Dao) classes while the application is being
compiled so that if there is a problem in one of the queries, you will be notified instantly.  
**See also:**

- [Dao](https://developer.android.com/reference/android/arch/persistence/room/Dao)
- [Entity](https://developer.android.com/reference/android/arch/persistence/room/Entity)
- [RoomDatabase](https://developer.android.com/reference/android/arch/persistence/room/RoomDatabase)

## Summary

|                                                                                                                  ### Public methods                                                                                                                  ||
|------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| ` Class[]` | ` `[entities](https://developer.android.com/reference/android/arch/persistence/room/Database#entities())`() ` The list of entities included in the database.                                                                             |
| ` boolean` | ` `[exportSchema](https://developer.android.com/reference/android/arch/persistence/room/Database#exportSchema())`() ` You can set annotation processor argument (`room.schemaLocation`) to tell Room to export the schema into a folder. |
| ` int`     | ` `[version](https://developer.android.com/reference/android/arch/persistence/room/Database#version())`() ` The database version.                                                                                                        |

| ### Inherited methods |
|-----------------------|---|
| From interface ` java.lang.annotation.Annotation ` |-----------------------------------------|-------------------------| | ` abstract Class<? extends Annotation>` | ` annotationType() `    | | ` abstract boolean`                     | ` equals(Object arg0) ` | | ` abstract int`                         | ` hashCode() `          | | ` abstract String`                      | ` toString() `          | ||

## Public methods

### entities

```
Class[] entities ()
```

The list of entities included in the database. Each entity turns into a table in the
database.

<br />

|                         Returns                         ||
|-----------|----------------------------------------------|
| `Class[]` | The list of entities in the database. <br /> |

### exportSchema

```
boolean exportSchema ()
```

You can set annotation processor argument (`room.schemaLocation`)
to tell Room to export the schema into a folder. Even though it is not mandatory, it is a
good practice to have version history in your codebase and you should commit that file into
your version control system (but don't ship it with your app!).


When `room.schemaLocation` is set, Room will check this variable and if it is set to
`true`, its schema will be exported into the given folder.


`exportSchema` is `true` by default but you can disable it for databases when
you don't want to keep history of versions (like an in-memory only database).

<br />

|                                                                     Returns                                                                     ||
|-----------|--------------------------------------------------------------------------------------------------------------------------------------|
| `boolean` | Whether the schema should be exported to the given folder when the `room.schemaLocation` argument is set. Defaults to `true`. <br /> |

### version

```
int version ()
```

The database version.

<br />

|               Returns               ||
|-------|------------------------------|
| `int` | The database version. <br /> |

-

  ## Annotations

  - [ColumnInfo](https://developer.android.com/reference/android/arch/persistence/room/ColumnInfo)
  - [ColumnInfo.Collate](https://developer.android.com/reference/android/arch/persistence/room/ColumnInfo.Collate)
  - [ColumnInfo.SQLiteTypeAffinity](https://developer.android.com/reference/android/arch/persistence/room/ColumnInfo.SQLiteTypeAffinity)
  - [Dao](https://developer.android.com/reference/android/arch/persistence/room/Dao)
  - [Database](https://developer.android.com/reference/android/arch/persistence/room/Database)
  - [Delete](https://developer.android.com/reference/android/arch/persistence/room/Delete)
  - [Embedded](https://developer.android.com/reference/android/arch/persistence/room/Embedded)
  - [Entity](https://developer.android.com/reference/android/arch/persistence/room/Entity)
  - [ForeignKey](https://developer.android.com/reference/android/arch/persistence/room/ForeignKey)
  - [ForeignKey.Action](https://developer.android.com/reference/android/arch/persistence/room/ForeignKey.Action)
  - [Ignore](https://developer.android.com/reference/android/arch/persistence/room/Ignore)
  - [Index](https://developer.android.com/reference/android/arch/persistence/room)
  - [Insert](https://developer.android.com/reference/android/arch/persistence/room/Insert)
  - [OnConflictStrategy](https://developer.android.com/reference/android/arch/persistence/room/OnConflictStrategy)
  - [PrimaryKey](https://developer.android.com/reference/android/arch/persistence/room/PrimaryKey)
  - [Query](https://developer.android.com/reference/android/arch/persistence/room/Query)
  - [RawQuery](https://developer.android.com/reference/android/arch/persistence/room/RawQuery)
  - [Relation](https://developer.android.com/reference/android/arch/persistence/room/Relation)
  - [SkipQueryVerification](https://developer.android.com/reference/android/arch/persistence/room/SkipQueryVerification)
  - [Transaction](https://developer.android.com/reference/android/arch/persistence/room/Transaction)
  - [TypeConverter](https://developer.android.com/reference/android/arch/persistence/room/TypeConverter)
  - [TypeConverters](https://developer.android.com/reference/android/arch/persistence/room/TypeConverters)
  - [Update](https://developer.android.com/reference/android/arch/persistence/room/Update)
-

  ## Classes

  - [DatabaseConfiguration](https://developer.android.com/reference/android/arch/persistence/room/DatabaseConfiguration)
  - [InvalidationTracker](https://developer.android.com/reference/android/arch/persistence/room/InvalidationTracker)
  - [InvalidationTracker.Observer](https://developer.android.com/reference/android/arch/persistence/room/InvalidationTracker.Observer)
  - [Room](https://developer.android.com/reference/android/arch/persistence/room/Room)
  - [RoomDatabase](https://developer.android.com/reference/android/arch/persistence/room/RoomDatabase)
  - [RoomDatabase.Builder](https://developer.android.com/reference/android/arch/persistence/room/RoomDatabase.Builder)
  - [RoomDatabase.Callback](https://developer.android.com/reference/android/arch/persistence/room/RoomDatabase.Callback)
  - [RoomDatabase.MigrationContainer](https://developer.android.com/reference/android/arch/persistence/room/RoomDatabase.MigrationContainer)
  - [RoomWarnings](https://developer.android.com/reference/android/arch/persistence/room/RoomWarnings)
  - [RxRoom](https://developer.android.com/reference/android/arch/persistence/room/RxRoom)
-

  ## Enums

  - [RoomDatabase.JournalMode](https://developer.android.com/reference/android/arch/persistence/room/RoomDatabase.JournalMode)
-

  ## Exceptions

  - [EmptyResultSetException](https://developer.android.com/reference/android/arch/persistence/room/EmptyResultSetException)