Native Mobile App Development With Java

Room Database Example

24-Sep-2024

Room Database Example


1/  Add room database dependency


implementation 'androidx.room:room-runtime:2.5.2'
annotationProcessor 'androidx.room:room-compiler:2.5.2'


2/  Design xml for room database implementation

*designed a list view to show room database data


<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/main"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">

<androidx.recyclerview.widget.RecyclerView
android:id="@+id/list_item"
android:layout_width="match_parent"
android:layout_height="match_parent" />

<com.google.android.material.floatingactionbutton.FloatingActionButton
android:id="@+id/id_add_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentEnd="true"
android:layout_alignParentBottom="true"
android:layout_marginStart="18dp"
android:layout_marginTop="18dp"
android:layout_marginEnd="18dp"
android:layout_marginBottom="18dp"
android:src="@android:drawable/ic_input_add"
app:tint="@color/white" />

</RelativeLayout>


3/  Create a model class for storing data


package com.example.myapplication;

import androidx.room.Entity;
import androidx.room.PrimaryKey;

@Entity(tableName = "user_table")
public class User {

@PrimaryKey(autoGenerate = true)
private int id;

private String name;
private String email;

// Constructor
public User(String name, String email) {
this.name = name;
this.email = email;
}

// Getters and Setters
public int getId() { return id; }

public void setId(int id) { this.id = id; }

public String getName() { return name; }

public void setName(String name) { this.name = name; }

public String getEmail() { return email; }

public void setEmail(String email) { this.email = email; }
}


4/  Create a Dao interface for room database.


package com.example.myapplication;

import androidx.room.Dao;
import androidx.room.Insert;
import androidx.room.Query;
import androidx.room.Delete;
import androidx.room.Update;

import java.util.List;

@Dao
public interface UserDao {

@Insert
void insert(User user);

@Update
void update(User user);

@Delete
void delete(User user);

@Query("SELECT * FROM user_table WHERE id = :userId LIMIT 1")
User getUserById(int userId);

@Query("SELECT * FROM user_table ORDER BY name ASC")
List<User> getAllUsers();
}


5/  Create room database class


package com.example.myapplication;

import androidx.room.Database;
import androidx.room.Room;
import androidx.room.RoomDatabase;
import android.content.Context;

@Database(entities = {User.class}, version = 1)
public abstract class UserDatabase extends RoomDatabase {

private static volatile UserDatabase INSTANCE;

public abstract UserDao userDao();

public static UserDatabase getInstance(Context context) {
if (INSTANCE == null) {
synchronized (UserDatabase.class) {
if (INSTANCE == null) {
INSTANCE = Room.databaseBuilder(context.getApplicationContext(),
UserDatabase.class, "user_database")
.allowMainThreadQueries()
.build();
}
}
}
return INSTANCE;
}
}


6/ Post and get data from code


package com.example.myapplication;

import android.os.Bundle;

import androidx.activity.EdgeToEdge;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.graphics.Insets;
import androidx.core.view.ViewCompat;
import androidx.core.view.WindowInsetsCompat;

import java.util.List;

public class MainActivity extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

UserDatabase db = UserDatabase.getInstance(this);
UserDao userDao = db.userDao();

User newUser = new User("John Doe", "john.doe@example.com");
userDao.insert(newUser);


List<User> userList = userDao.getAllUsers();
User user = userDao.getUserById(1);
System.out.println(user.getName());

}
}


Comments