Develop an android application to insert data in SQLite database and show the added records

AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.sqlitedbapp">
    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">

        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>
</manifest>

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity"
    android:padding="20dp"
    android:orientation="vertical">

    <EditText android:id="@+id/etRN"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="Enter roll no" />

    <EditText android:id="@+id/etName"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="Enter name" />

    <Button android:id="@+id/btnAddStudent"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Add Student"
        android:onClick="addNewStudent"/>

    <TextView android:id="@+id/tvInfo"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:textSize="22sp"
        android:padding="10dp"/>

</LinearLayout>

MainActivity.java

package com.example.sqlitedbapp;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;
import android.widget.TextView;
import java.util.List;

public class MainActivity extends AppCompatActivity {

    DatabaseHelper databaseHelper;
    EditText etRN, etName;
    TextView tvInfo;

    @Override
    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        etRN = findViewById(R.id.etRN);
        etName = findViewById(R.id.etName);
        tvInfo = findViewById(R.id.tvInfo);
        databaseHelper = new DatabaseHelper(MainActivity.this);
    }

    public void addNewStudent(View view) {

        int rn = Integer.parseInt(etRN.getText().toString());
        String name = etName.getText().toString();
        databaseHelper.addStudent(rn, name);
        displayAllStudents();
    }

    private void displayAllStudents() {

        List<Student> studentList = databaseHelper.allStudents();
        String data = "";

        for(Student s : studentList) {
            data += s.getRollno() + ", " + s.getName() + "\n";
        }
        tvInfo.setText(data);
    }
}

DatabaseHelper.java

package com.example.sqlitedbapp;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import java.io.File;
import java.util.ArrayList;
import java.util.List;

public class DatabaseHelper extends SQLiteOpenHelper {
  
    private static final int DATABASE_VERSION=1;
    private static final String DATABASE_NAME = "mydb.db";
    private static final String TABLE_NAME = "StudentData";
    private static final String COLUMN_ID = "_id";
    private static final String COLUMN_ROLL_NO = "RollNo";
    private static final String COLUMN_NAME = "Name";

    public DatabaseHelper(Context context) {
        super(context, DATABASE_NAME, null, DATABASE_VERSION);
    }
    
    @Override
    public void onCreate(SQLiteDatabase db) {
        String query = "CREATE TABLE " + TABLE_NAME + "( " + COLUMN_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " + COLUMN_ROLL_NO + " TEXT"+", " + COLUMN_NAME + ");";
        try {
            db.execSQL(query);
        }
        catch(Exception e) {
            e.printStackTrace();
        }
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        db.execSQL("DROP TABLE IF EXISTS " + TABLE_NAME);
        onCreate(db);
    }

    public void addStudent(int rollno, String name) {
        ContentValues values = new ContentValues();
        SQLiteDatabase db = getWritableDatabase();
        values.put(COLUMN_ROLL_NO, rollno);
        values.put(COLUMN_NAME, name);
        db.insert(TABLE_NAME, null, values);
        db.close();
    }

    public List allStudents() {
        List<Student> list = new ArrayList<Student>();
        String query = "SELECT DISTINCT " + COLUMN_ROLL_NO + "," + COLUMN_NAME + " FROM " + TABLE_NAME + " ORDER BY "+ COLUMN_ID;
        SQLiteDatabase db = getWritableDatabase();
        Cursor c = db.rawQuery(query, null);
        int rn;
        String n;

        while (c.moveToNext()) {
            rn = c.getInt(c.getColumnIndex(COLUMN_ROLL_NO));
            n = c.getString(c.getColumnIndex(COLUMN_NAME));
            list.add(new Student(rn, n));
        }
        db.close();
        return list;
    }

    public void delete(int rollno) {

        SQLiteDatabase db = getWritableDatabase();
        db.execSQL("DELETE FROM " + TABLE_NAME + " WHERE " + COLUMN_ROLL_NO + "=" + rollno);
    }
}

Student.java

package com.example.sqlitedbapp;
public class Student {

    int rollno;
    String name;

    public Student(int rollno, String name) {
        this.rollno = rollno;
        this.name = name;
    }

    public int getRollno() {
        return rollno;
    }

    public void setRollno(int rollno) {
        this.rollno = rollno;
    }

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

OUTPUT