Skip to content

Most visited

Recently visited



public abstract @interface Database
implements Annotation

Marks a class as a RoomDatabase.

The class should be an abstract class and extend RoomDatabase.

You can receive an implementation of the class via Room.databaseBuilder or Room.inMemoryDatabaseBuilder.

 // 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 or 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 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 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:


Public methods

Class[] entities()

The list of entities included in the database.

boolean exportSchema()

You can set annotation processor argument (room.schemaLocation) to tell Room to export the schema into a folder.

int version()

The database version.

Inherited methods

Public methods


Class[] entities ()

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

Class[] The list of entities in the database.


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

boolean Whether the schema should be exported to the given folder when the room.schemaLocation argument is set. Defaults to true.


int version ()

The database version.

int The database version.

This site uses cookies to store your preferences for site-specific language and display options.

Get the latest Android developer news and tips that will help you find success on Google Play.

* Required Fields


Follow Google Developers on WeChat

Browse this site in ?

You requested a page in , but your language preference for this site is .

Would you like to change your language preference and browse this site in ? If you want to change your language preference later, use the language menu at the bottom of each page.

This class requires API level or higher

This doc is hidden because your selected API level for the documentation is . You can change the documentation API level with the selector above the left navigation.

For more information about specifying the API level your app requires, read Supporting Different Platform Versions.

Take a short survey?
Help us improve the Android developer experience. (April 2018 — Developer Survey)