ANDROID SQLITE DATABASE

ANDROID SQLITE DATABASE

________________________________________________

SQL databases :

It is used to Store data in tables of rows and columns. The intersection of a row and column is

called as a field and contains data. The fields are references to other fields or other tables

Fields contain data, references to other fields, or references to other tables. Rows in the

database tables are identified by unique IDs. The database  Columns are identified by the

names and are unique per table.

An SQLite database is a good storage solution when you have structured data means

students data or Employer’s data etc. that you need to store and access, search, and make

change as and when required. If you want to  represent your data with  rows and columns,

consider a SQLite database.

 

Cursor

When we query the database by using SQLiteDatabase it always returns  the results as

a Cursor in a table format that resembles that of a SQL database. If  the data as an array of rows.

A cursor is a pointer into one row of that structured( table data) data. The Cursor class has

methods that are used to moving the cursor through the data structure, and methods to get the

data from the fields in each row etc.

Some common operations on cursor are:

getCount() returns the number of rows in the database to the cursor.

getColumnNames() returns a string array holding the names of all of the columns.

getPosition() returns the current position of the cursor in the row.

To use SQL database, we have to implement SQLiteOpenHelper class to return the cursor object

to the calling activity or adapter, Here adapter class acts as a mediator between AdapterView and

Database.

ContentValues :

To  store data, an instance of ContentValues are used. it stores data as key-value pairs, where

the key represents the name of the column and the value is the value for the cell. One instance of

ContentValues represents one row of a table.

The insert() method for the database requires that the values to fill a row are passed as an

instance of ContentValues.

To insert data into the database we are passing the values for rows as a instance of

ContentValues. Below sample code describes how to insert data into database using

ContentValues and insert() method.

ContentValues values = new ContentValues();

// Insert one row. Use a loop to insert multiple rows.

values.put(KEY_WORD, "Android");

values.put(KEY_DEFINITION, "Mobile operating system.");

 

db.insert(WORD_LIST_TABLE, null, values);

 

Creating an SQLite database:

To create a database for your Android app, you need to do the following.

Create a data model.

Subclass  SQLIteOpenHelper. Use constants for table names and database creation query

Implement onCreate to create the SQLiteDatabase with tables for your data. To create

SQLIteDatabase in our application we have to impement it inside onCreate() methods

create onUpgrade() : to make data base changes means creating new user or deleting the user data

etc.

Creating the query(),

insert(): this method is used to insert a row into the database.

delete(): delete method used to delete the database and database table.

update() :update method is used to update the data base means example:adding/deleting user data.

count() : this method is used to get number of rows in the database.

methods in SQLiteOpenHelper.

In your MainActivity, create an instance of SQLiteOpenHelper.

Call methods of SQLiteOpenHelper to work with your database

 

Data model :

create a class that represents your data with getters and setters methods as shown below example code:

public class WordItem {

private int mId;

private String mWord;

private String mDefinition;

// Getters and setters and more

}

Subclass SQLiteOpenHelper :

Any open helper you create must extend SQLiteOpenHelper. As given below example code.

public class WordListOpenHelper extends SQLiteOpenHelper {

public WordListOpenHelper(Context context) {

super(context, DATABASE_NAME, null, DATABASE_VERSION);

Log.d(TAG, "Construct WordListOpenHelper");

}

}

 

Define constants for table names :

it is customary to declare your table, column, and row names as constants. This makes your code a lot more readable, makes it developer  friendly to change names easily.

 private static final int DATABASE_VERSION = 1;
  // has to be 1 first time or app will crash
  private static final String WORD_LIST_TABLE = "word_entries";
  private static final String DATABASE_NAME = "wordlist";

  // Column names...
  public static final String KEY_ID = "_id";
  public static final String KEY_WORD = "word";

  // ... and a string array of columns.
  private static final String[] COLUMNS = {KEY_ID, KEY_WORD};

query for creating database :

The below example sample code used for creating database.

private static final String WORD_LIST_TABLE_CREATE =
            "CREATE TABLE " + WORD_LIST_TABLE + " (" +
             KEY_ID + " INTEGER PRIMARY KEY, " +
             // will auto-increment if no value passed
             KEY_WORD + " TEXT );";

Implement onCreate() and create the database:

The onCreate method is only called if there is no database. Create your tables in the method, and optionally add initial data.

@Override
public void onCreate(SQLiteDatabase db) { // Creates new database
   db.execSQL(WORD_LIST_TABLE_CREATE); // Create the tables
   fillDatabaseWithData(db); // Add initial data
   // Cannot initialize mWritableDB and mReadableDB here, because
   // this creates an infinite loop of on Create()
   // being repeatedly called.
}

Implement onUpgrade() :

This is a required method. If you want to modify database table, delete, update extra are done by this onUpgrade(). If you want to delate table and the recreate them also.

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    // SAVE USER DATA FIRST!!!
        Log.w(WordListOpenHelper.class.getName(),
                "Upgrading database from version " + oldVersion + " to "
                        + newVersion + ", which will destroy all old data");
        db.execSQL("DROP TABLE IF EXISTS " + WORD_LIST_TABLE);
        onCreate(db);
}

query() :

 

The  query method implemented in OpenHelper class returns any data types that user interface needs

The database provides two methods for sending queries:

SQLiteDatabase.rawQuery()

SQLiteDatabase.query().

 

SQLiteDatabase.rawQuery()

The open helper query method can construct an SQL query and then send it as a rawQuery to the database which returns a cursor. Means your data is supplied by your app, and under your full control, you can use rawQuery().

rawQuery(String sql, String[] selectionArgs)

 

The first parameter to db.rawquery() is an SQLite query string.

The second parameter contains the arguments.

cursor = mReadableDB.rawQuery(queryString, selectionArgs);

 

SQLiteDatabase.query()

If you are processing user-supplied data, even after validation, it is more secure to construct a query and use a version of the SQLiteDatabase.query() method for the database.

Cursor query (boolean distinct,  String table, String[] columns, String selection,
                String[] selectionArgs, String groupBy, String having,  
                String orderBy,String limit)

Here is a sample  basic example code:

String[] columns = new String[]{KEY_WORD};
String where =  KEY_WORD + " LIKE ?";
searchString = "%" + searchString + "%";
String[] whereArgs = new String[]{searchString};
cursor = mReadableDB.query(WORD_LIST_TABLE, columns, where, whereArgs, null, null, null);

 

Example of complete open helper query()

public WordItem query(int position) {
   String query = "SELECT  * FROM " + WORD_LIST_TABLE +
           " ORDER BY " + KEY_WORD + " ASC " +
           "LIMIT " + position + ",1";

   Cursor cursor = null;
   WordItem entry = new WordItem();

   try {
       if (mReadableDB == null) {mReadableDB = getReadableDatabase();}
       cursor = mReadableDB.rawQuery(query, null);
       cursor.moveToFirst();
       entry.setId(cursor.getInt(cursor.getColumnIndex(KEY_ID)));
       entry.setWord(cursor.getString(cursor.getColumnIndex(KEY_WORD)));
   } catch (Exception e) {
       Log.d(TAG, "EXCEPTION! " + e);
   } finally {
       // Must close cursor and db now that we are done with it.
       cursor.close();
       return entry;
   }
}

 

__________________________________________________

The following example given below used to create Students database tabls using SQLIte Database and store Students name and Students callege name into the Database

 

 

AndroidManifest.xml : 

The manifest file is creted by android and it has name of the package and activity name here it is MainActivity.

 

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.iflutter.sqlitedatabasedemo">

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

The activity_main.xml layout file was created for user input value. it has two input value one is enter students name and enter college name. these two input values has uniq ID’s to identify them. And it also have two Buttons one is doSave and other is load these Buttons has two uniq Identifiers to identify them.

 

<?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:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <TextView
        android:id="@+id/textView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="51dp"
        android:text="SQLiteDatabase"
        android:textSize="30sp" />

    <EditText
        android:id="@+id/edit1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentStart="true"
        android:layout_alignParentTop="true"
        android:layout_marginStart="30dp"
        android:layout_marginTop="140dp"
        android:ems="10"
        android:hint="Enter Student Name"
        android:inputType="textPersonName" />

    <EditText
        android:id="@+id/edit2"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentStart="true"
        android:layout_alignParentTop="true"
        android:layout_marginStart="15dp"
        android:layout_marginTop="219dp"
        android:ems="10"
        android:hint="Enter Your College Name"
        android:inputType="textPersonName" />

    <Button
        android:id="@+id/button"
        android:layout_width="wrap_content"
        android:onClick="doSave"
        android:layout_height="wrap_content"
        android:layout_alignParentStart="true"
        android:layout_below="@+id/edit2"
        android:text="SAVE" />

    <Button
        android:id="@+id/button2"
        android:layout_width="wrap_content"
        android:onClick="doLoad"
        android:layout_height="wrap_content"
        android:layout_alignEnd="@+id/textView"
        android:layout_alignParentBottom="true"
        android:layout_marginBottom="191dp"
        android:text="LOAD" />
</RelativeLayout>

 

MainActivity.java:

In this MainActivity class code. we are loading the activity_main.xml layout file and we are getting the user input value. And passing  them to the inser() method to load into the student database table by using databse instance inside doSave() method of the Activity class .

We are getting all the data from database stored in student table inside doLoad() method by executing  myData.getAll(); code inside the MainActivity

package com.example.shyamkumar.sqlitedatabasedemo;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;
import android.widget.ListView;

public class MainActivity extends AppCompatActivity {
EditText name,college;
MyCoreDatabase myData;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        name = (EditText)findViewById(R.id.edit1);
        college = (EditText)findViewById(R.id.edit2);
        myData = new MyCoreDatabase(this);

    }

    public void doSave(View view) {
        // through mydata object data is saved into data base table
        myData.insertData(name.getText().toString(),college.getText().toString());
    }myData.getAll();

    public void doLoad(View view) {
        
    }
}

 

MyCoreDatabase.java :

MyCoreDatabase class extends SQLiteOpenHelper class. Inside MyCoreDatabase class we are creating the database name and database table name. Using onCreate() method we are creating the database table name.Using onUpgrade() method we are updating the database database. Using insert() method we are iserting the user entered data in layout file that was passed fromMainActivity to this class. And here this class stores the user entered data into the database table.

Using getAll() method we are getting the data from the database table and passig it to the MainActivity from there it is dispayed to the user by executing the layout file  load UI interface. or when we click on load it loads all the data from the students table to the user.

 

package com.example.shyamkumar.sqlitedatabasedemo;

import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;
import android.widget.Toast;
import android.widget.ListView;

public class MyCoreDatabase extends SQLiteOpenHelper {

    static final private String DB_NAME = "Education";
    static final private String DB_TABLE = "students";
    static final private int DB_VER = 1;
    Context ctx;
    SQLiteDatabase myDb;
    public MyCoreDatabase(Context ct){
        super(ct,DB_NAME,null,DB_VER);
        ctx = ct;
    }



    @Override
    public void onCreate(SQLiteDatabase sqLiteDatabase){
        sqLiteDatabase.execSQL("create table "+DB_TABLE+" (_id integer primary key autoincrement,stu_name text,college_name text);");
        Log.i("Database","Table created");

    }

    @Override
    public void onUpgrade(SQLiteDatabase sqLiteDatabase, int oldVersion, int newVersion) {

        sqLiteDatabase.execSQL("drop table if exist"+DB_TABLE);
        onCreate(sqLiteDatabase);


    }
    public void insertData(String s1,String s2){

        myDb = getWritableDatabase();
        myDb.execSQL("insert into "+DB_TABLE+" (stu_name,college_name) values('"+s1+"','"+s2+"');");
        Toast.makeText(ctx,"data saved successfully",Toast.LENGTH_SHORT).show();


    }
    public void getAll(){

        myDb = getReadableDatabase();
       // Cursor cr = myDb.rawQuery("Select * from "+DB_NAME,null);
        Cursor cr = myDb.rawQuery("select * from "+DB_TABLE,null);
        StringBuilder str = new StringBuilder();
        while(cr.moveToNext()){
            String s1 = cr.getString(1);
            String s2 = cr.getString(2);
            str.append(s1+"     "+s2+" \n");
        }
        Toast.makeText(ctx,str.toString(),Toast.LENGTH_LONG).show();
    }


}
Congratulations You Have Learned About SQLite Database Using In Android Studio.

Leave a Reply

Categories