- It is required to write long repetitive code which will be time consuming as well as erring.
- It is very difficult to manage SQL queries for a complex relational database.
Annotations in Room Persistence Library
Annotations | Purpose |
@Entity | Creates a SQLite table in the database using a data model class. |
@Dao | Create a Data Access Object in the database using an interface class. |
@Database | A class with this annotation will create an abstraction for the Data Access Object. |
@PrimaryKey | A variable with this annotation will set a primary key for the table. |
@Insert | Inserts parameters into the table. |
@Update | Updates parameters of an existing table. |
@Delete | Deletes parameters of an existing table |
@Query | Running SQL query method within the table |
@Ignore | Ignores the parameter form the Room database |
Let’s have a look on how to implement this with an example.
1. Add the gradle dependencies in build.gradle file.
implementation “android.arch.persistence.room:runtime:1.0.0”
annotationProcessor “android.arch.persistence.room:compiler:1.0.0”
@Entity
public class Movies {
@NonNull
@PrimaryKey
private String movieId;
private String movieName;
public Movies() {
}
public String getMovieId() { return movieId; }
public void setMovieId(String movieId) { this.movieId = movieId; }
public String getMovieName() { return movieName; }
public void setMovieName (String movieName) { this.movieName = movieName; }
}
3. Create an interface class for Database access. Create abstract methods for CRUD operations. Add custom SQL query as a method.
@Dao
public interface DaoAccess {
@Insert
void insertOnlySingleMovie (Movies movies);
@Insert
void insertMultipleMovies (List<Movies> moviesList);
@Query (“SELECT * FROM Movies WHERE movieId = :movieId“)
Movies fetchOneMoviesbyMovieId (int movieId);
@Update
void updateMovie (Movies movies);
@Delete
void deleteMovie (Movies movies);
}
4. Create a Database class for database implementation.
@Database (entities = {Movies.class}, version = 1, exportSchema = false)
public abstract class MovieDatabase extends RoomDatabase {
public abstract DaoAccess daoAccess() ;
}
5.Declare and initialize object for the Database class in your Activity or Fragment class.
private static final String DATABASE_NAME = “movies_db”;
private MovieDatabase movieDatabase;
movieDatabase = Room.databaseBuilder(getApplicationContext(),
MovieDatabase.class, DATABASE_NAME)
.fallbackToDesctructiveMigration()
.build();
Initial steps are done. By using the database object, you can do all functionalities for database management.
Sample Insert code:-
new Thread(new Runnable() {
@Override
public void run() {
Movies movie =new Movies();
movie.setMovieId( “2”);
movie.setMovieName(“The Prestige”);
movieDatabase.daoAccess () . insertOnlySingleMovie (movie);
}
}) .start();
Always use a Thread , AsyncTask or any worker threads to perform database operations.
For further queries, please refer: https://developer.android.com/training/data-storage/room/index.html
Experience seamless coding, now that there’s ROOM for improvement!
Looking for an overview on Android Studio 3.0? Our blog A Quick Look at Android Studio 3.0 can help!