activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<layout>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:padding="16dp"
android:id="@+id/main">
<!-- EditText for Name -->
<EditText
android:id="@+id/editName"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="Enter Name"
android:inputType="textPersonName"
android:textSize="16sp"
android:padding="10dp" />
<!-- EditText for Location -->
<EditText
android:id="@+id/editLocation"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="Enter Location"
android:inputType="text"
android:textSize="16sp"
android:padding="10dp" />
<!-- EditText for Designation -->
<EditText
android:id="@+id/editDesignation"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="Enter Designation"
android:inputType="text"
android:textSize="16sp"
android:padding="10dp" />
<!-- Save Button -->
<Button
android:id="@+id/btnSave"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Save"
android:textSize="18sp"
android:padding="12dp"
android:layout_marginTop="20dp"
android:background="@android:color/holo_blue_light" />
</LinearLayout>
</layout>
MainActivity.kt
package com.androindian.sqlite
import android.content.Intent
import android.os.Bundle
import android.widget.Toast
import androidx.activity.enableEdgeToEdge
import androidx.appcompat.app.AppCompatActivity
import androidx.core.view.ViewCompat
import androidx.core.view.WindowInsetsCompat
import androidx.databinding.DataBindingUtil
import com.androindian.sqlite.databinding.ActivityMainBinding
class MainActivity : AppCompatActivity() {
var binding: ActivityMainBinding?=null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
enableEdgeToEdge()
binding= DataBindingUtil.setContentView(this,R.layout.activity_main)
ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.main)) { v, insets ->
val systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars())
v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom)
insets
}
var dbhelper=DbHelper(this@MainActivity)
binding?.btnSave?.setOnClickListener{
var name=binding?.editName?.text?.toString()
var location=binding?.editLocation?.text.toString()
var designation=binding?.editDesignation?.text.toString()
dbhelper.insertUserDetails(name,location,designation)
Toast.makeText(this@MainActivity,"Saved Sucessfully",Toast.LENGTH_LONG).show()
var intent=Intent(this@MainActivity,DetailsActivity::class.java)
startActivity(intent)
}
}
}
Dbhelper.kt
package com.androindian.sqlite
import android.annotation.SuppressLint
import android.content.ContentValues
import android.content.Context
import android.database.Cursor
import android.database.sqlite.SQLiteDatabase
import android.database.sqlite.SQLiteOpenHelper
class DbHelper(context: Context?) : SQLiteOpenHelper(context, DB_NAME, null, DB_VERSION) {
override fun onCreate(db: SQLiteDatabase) {
val CREATE_TABLE = ("CREATE TABLE " + TABLE_Users + "("
+ KEY_ID + " INTEGER PRIMARY KEY AUTOINCREMENT," + KEY_NAME + " TEXT,"
+ KEY_LOC + " TEXT,"
+ KEY_DESG + " TEXT" + ")")
db.execSQL(CREATE_TABLE)
}
override fun onUpgrade(db: SQLiteDatabase, oldVersion: Int, newVersion: Int) {
// Drop older table if exist
db.execSQL("DROP TABLE IF EXISTS " + TABLE_Users)
// Create tables again
onCreate(db)
}
// **** CRUD (Create, Read, Update, Delete) Operations ***** //
// Adding new User Details
fun insertUserDetails(name: String?, location: String?, designation: String?) {
//Get the Data Repository in write mode
val db = this.writableDatabase
//Create a new map of values, where column names are the keys
val cValues = ContentValues()
cValues.put(KEY_NAME, name)
cValues.put(KEY_LOC, location)
cValues.put(KEY_DESG, designation)
// Insert the new row, returning the primary key value of the new row
val newRowId = db.insert(TABLE_Users, null, cValues)
db.close()
}
// Get User Details
@SuppressLint("Range")
fun GetUsers(): ArrayList<HashMap<String, String>> {
val db = this.writableDatabase
val userList = ArrayList<HashMap<String, String>>()
val query = "SELECT name, location, designation FROM " + TABLE_Users
val cursor = db.rawQuery(query, null)
while (cursor.moveToNext()) {
val user = HashMap<String, String>()
user["name"] = cursor.getString(cursor.getColumnIndex(KEY_NAME))
user["designation"] = cursor.getString(cursor.getColumnIndex(KEY_DESG))
user["location"] = cursor.getString(cursor.getColumnIndex(KEY_LOC))
userList.add(user)
}
return userList
}
// Get User Details based on userid
@SuppressLint("Range")
fun GetUserByUserId(userid: Int): ArrayList<HashMap<String, String>> {
val db = this.writableDatabase
val userList = ArrayList<HashMap<String, String>>()
val query = "SELECT name, location, designation FROM " + TABLE_Users
val cursor = db.query(
TABLE_Users,
arrayOf(KEY_NAME, KEY_LOC, KEY_DESG),
KEY_ID + "=?",
arrayOf(userid.toString()),
null,
null,
null,
null
)
if (cursor.moveToNext()) {
val user = HashMap<String, String>()
user["name"] = cursor.getString(cursor.getColumnIndex(KEY_NAME))
user["designation"] = cursor.getString(cursor.getColumnIndex(KEY_DESG))
user["location"] = cursor.getString(cursor.getColumnIndex(KEY_LOC))
userList.add(user)
}
return userList
}
// Delete User Details
fun DeleteUser(userid: Int) {
val db = this.writableDatabase
db.delete(TABLE_Users, KEY_ID + " = ?", arrayOf(userid.toString()))
db.close()
}
// Update User Details
fun UpdateUserDetails(
location: String?,
designation: String?,
id: Int
): Int {
val db = this.writableDatabase
val cVals = ContentValues()
cVals.put(KEY_LOC, location)
cVals.put(KEY_DESG, designation)
return db.update(TABLE_Users, cVals, "$KEY_ID = ?", arrayOf(id.toString()))
}
companion object {
private const val DB_VERSION = 1
private const val DB_NAME = "usersdb"
private const val TABLE_Users = "userdetails"
private const val KEY_ID = "id"
private const val KEY_NAME = "name"
private const val KEY_LOC = "location"
private const val KEY_DESG = "designation"
}
}
activity_data.xml
<?xml version="1.0" encoding="utf-8"?>
<layout>
<LinearLayout 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=".DetailsActivity"
android:orientation="vertical">
<ListView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/list"
android:layout_margin="10dp"/>
</LinearLayout>
</layout>
DeatilsActivity.kt
package com.androindian.sqlite
import android.os.Bundle
import android.widget.SimpleAdapter
import androidx.activity.enableEdgeToEdge
import androidx.appcompat.app.AppCompatActivity
import androidx.core.view.ViewCompat
import androidx.core.view.WindowInsetsCompat
import androidx.databinding.DataBindingUtil
import androidx.recyclerview.widget.ListAdapter
import com.androindian.sqlite.databinding.ActivityDetailsBinding
class DetailsActivity : AppCompatActivity() {
var binding:ActivityDetailsBinding?=null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
enableEdgeToEdge()
binding= DataBindingUtil.setContentView(this,R.layout.activity_details)
ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.main)) { v, insets ->
val systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars())
v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom)
insets
}
var dbHelper=DbHelper(this@DetailsActivity)
var uselist=dbHelper.GetUsers()
val adapter: android.widget.ListAdapter = SimpleAdapter(
this@DetailsActivity,
uselist,
R.layout.custom,
arrayOf("name", "designation", "location"),
intArrayOf(R.id.name, R.id.designation, R.id.location))
binding?.list?.adapter=adapter
}
}
custom.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/name"
android:layout_margin="10dp"/>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/location"
android:layout_margin="10dp"/>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/designation"
android:layout_margin="10dp"/>
</LinearLayout>