Pada bagian kedua tentang tutorial aplikasi inventaris Android menggunakan database SQLite ini, kita akan belajar tentang bagaimana membuat fungsi create/insert data, untuk memasukkan data baru ke dalam database SQLite.

Tutorial ini berhubungan dengan tutorial-tutorial tentang database SQLite sebelumnya, karena itu saya sarankan untuk membaca tutorial-tutorial sebelumnya di sini.

Pre-Requisites

Let’s Begin

Oke, sekarang buka kembali project Aplikasi Inventaris kalian. Di pertemuan sebelumnya kita sudah membuat kelas Barang.java yang berfungsi sebagai Model objek barang, dan kelas DBHelper.java yang berfungsi untuk mempermudah aplikasi dalam membuat dan mengakses database. Sekarang untuk kelanjutannya, kita akan membuat sebuah kelas yang berfungsi untuk insert data atau create data. Kelas ini berfungsi untuk menambahkan data barang baru ke database. Dan inilah daftar file-file yang akan kita buat :

  • menu.xml : berfungsi untuk membuat sebuah layout main menu 
  • create_data.xml : berfungsi sebagail layout untuk tampilan input data
  • DBDataSource.java : berfungsi sebagai Controller, kelas inilah yang nantinya berguna untuk melakukan operasi-operasi pada database, termasuk operasi Create Data
  • CreateData.java : berfungsi sebagai View atau interface untuk memasukkan data

Pertama-tama, kita akan membuat kelas Menu terlebih dahulu, karena itu kita butuh file layout-nya. Buka folder res/layout pada proyek kalian, dan buat sebuah file xml baru dengan nama menu.xml Isikan kode berikut :

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    >

    <TextView
        android:id="@+id/nama_app"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:layout_centerVertical="true"
        android:textSize="20sp"
        android:text="twoh.co"
        />

    <Button
        android:id="@+id/button_tambah"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@id/nama_app"
        android:layout_centerHorizontal="true"
        android:text="Tambah Data"
        />
</RelativeLayout>

Yups, kali ini layout di atas menggunakan Relative Layout supaya mudah mengatur posisinya. Layout di atas hanya berisi Nama Aplikasi dan sebuah tombol untuk Tambah Data. 

Setelah itu, kita akan membuat kelas Main Menunya, buat sebuah activity class bernama Menu.java 

package id.twooh.appinventory;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

public class Menu extends Activity implements OnClickListener{

	private Button bTambah;

	@Override
	public void onCreate(Bundle savedInstanceState) {
	      super.onCreate(savedInstanceState);
	      setContentView(R.layout.menu);

	      bTambah = (Button) findViewById(R.id.button_tambah);
	      bTambah.setOnClickListener(this);

	}
	@Override
	public void onClick(View v) {
		// TODO Auto-generated method stub
		switch(v.getId())
		{
			case R.id.button_tambah :
				Intent i = new Intent(this, CreateData.class);
				startActivity(i);
				break;

		}
	}
}

Kelas ini berfungsi untuk menampilkan tombol “Tambah Data”, yang apabila kita klik akan berpindah ke Activity Create Data. Karena kelas Create Data nya belum ada, selanjutnya kita akan membuat kelas tersebut. Namun kita akan membuat file xml layout-nya terlebih dahulu, yang bernama create_data.xml :

<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"
    android:orientation="vertical"
    >

    <EditText
        android:id="@+id/nama_barang"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="15dp"
        android:inputType="text"
        android:hint=Nama Barang"
        android:ems="10" >

        <requestFocus />
    </EditText>
        <EditText
        android:id="@+id/merk_barang"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="15dp"
        android:inputType="text"
        android:hint="Merk Barang"
        android:ems="10" >

        <requestFocus />
    </EditText>
        <EditText
        android:id="@+id/harga_barang"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="15dp"
        android:inputType="number"
        android:hint="Harga Barang"
        android:ems="10" >

        <requestFocus />
    </EditText>

    <Button
        android:id="@+id/buttom_submit"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Submit"
        />
</LinearLayout>

Layout di atas berisi EditText yang berfungsi sebagai wadah inputan tiga buah informasi dasar, yaitu nama barang, merk barang dan harga barang, dan sebuah tombol submit di bawahnya. Setelah itu, kita akan buat Activity CreateData. Aktivitas ini berfungsi sebagai View dalam paradigma Model-View-Controller yang kita gunakan. Atau dengan kata lain kelas ini menyediakan sebuah interface untuk menambahkan barang. Langsung saja kita buat kelas baru bernama CreateData.java

package id.twooh.appinventory;

import android.os.Bundle;
import android.app.Activity;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

public class CreateData extends Activity implements OnClickListener{

	//inisilisasi elemen-elemen pada layout
	private Button buttonSubmit;
	private EditText edNama;
	private EditText edMerk;
	private EditText edHarga;
	//inisialisasi kontroller/Data Source
	private DBDataSource dataSource;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.create_data);

        buttonSubmit = (Button) findViewById(R.id.buttom_submit);
        buttonSubmit.setOnClickListener(this);
        edNama = (EditText) findViewById(R.id.nama_barang);
        edHarga = (EditText) findViewById(R.id.harga_barang);
        edMerk = (EditText) findViewById(R.id.merk_barang);

        // instanstiasi kelas DBDataSource
        dataSource = new DBDataSource(this);

        //membuat sambungan baru ke database
        dataSource.open();
    }

    //KETIKA Tombol Submit Diklik
	@Override
	public void onClick(View v) {
		// Inisialisasi data barang
		String nama = null;
		String merk = null;
		String harga = null;
		@SuppressWarnings("unused")

		//inisialisasi barang baru (masih kosong)
		Barang barang = null;
		if(edNama.getText()!=null && edMerk.getText()!=null && edHarga.getText()!=null)
		{
			/* jika field nama, merk, dan harga tidak kosong
			 * maka masukkan ke dalam data barang*/
			nama = edNama.getText().toString();
			merk = edMerk.getText().toString();
			harga = edHarga.getText().toString();
		}

		switch(v.getId())
		{
			case R.id.buttom_submit:
				// insert data barang baru
				barang = dataSource.createBarang(nama, merk, harga);

				//konfirmasi kesuksesan
				Toast.makeText(this, "masuk Barang\n" +
						"nama" + barang.getNama_barang() +
						"merk" + barang.getMerk_barang() +
						"harga" + barang.getHarga_barang(), Toast.LENGTH_LONG).show();
				break;
		}

	}
}

Nah, sekarang kita sudah membuat sebuah interface/antar muka untuk menginputkan data. Yang kita perlukan sekarang adalah sebuah Controller yang akan menyambungkan interface tersebut dengan database yang kita buat. Jika kalian copy pastekan kode di atas akan ada error, tapi biarkan saja. Karena error tersebut disebabkan oleh kelas kontroler DBDataSource yang belum kita buat. Salah satu error yang muncul adalah pada bagian inisialiasi DBDataSource seperti berikut :

private DBDataSource dataSource;

Oke, langsung kita buat saja file baru bernama DBDataSource.java. Kodenya seperti berikut :

package id.twooh.appinventory;

import java.util.ArrayList;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;
import android.util.Log;

public class DBDataSource {

	//inisialiasi SQLite Database
	private SQLiteDatabase database;

	//inisialisasi kelas DBHelper
	private DBHelper dbHelper;

	//ambil semua nama kolom
	private String[] allColumns = { DBHelper.COLUMN_ID,
		      DBHelper.COLUMN_NAME, DBHelper.COLUMN_MERK,DBHelper.COLUMN_HARGA};

	//DBHelper diinstantiasi pada constructor
	public DBDataSource(Context context)
	{
		dbHelper = new DBHelper(context);
	}

	//membuka/membuat sambungan baru ke database
	public void open() throws SQLException {
	    database = dbHelper.getWritableDatabase();
	}

	//menutup sambungan ke database
	public void close() {
		dbHelper.close();
	}

	//method untuk create/insert barang ke database
	public Barang createBarang(String nama, String merk, String harga) {

		// membuat sebuah ContentValues, yang berfungsi
		// untuk memasangkan data dengan nama-nama
		// kolom pada database
	    ContentValues values = new ContentValues();
	    values.put(DBHelper.COLUMN_NAME, nama);
	    values.put(DBHelper.COLUMN_MERK, merk);
	    values.put(DBHelper.COLUMN_HARGA, harga);

	    // mengeksekusi perintah SQL insert data
	    // yang akan mengembalikan sebuah insert ID
	    long insertId = database.insert(DBHelper.TABLE_NAME, null,
	        values);

	    // setelah data dimasukkan, memanggil
	    // perintah SQL Select menggunakan Cursor untuk
	    // melihat apakah data tadi benar2 sudah masuk
	    // dengan menyesuaikan ID = insertID
	    Cursor cursor = database.query(DBHelper.TABLE_NAME,
	        allColumns, DBHelper.COLUMN_ID + " = " + insertId, null,
	        null, null, null);

	    // pindah ke data paling pertama
	    cursor.moveToFirst();

	    // mengubah objek pada kursor pertama tadi
	    // ke dalam objek barang
	    Barang newBarang = cursorToBarang(cursor);

	    // close cursor
	    cursor.close();

	    // mengembalikan barang baru
	    return newBarang;
	  }

	private Barang cursorToBarang(Cursor cursor)
	{
		// buat objek barang baru
		Barang barang = new Barang();
		// debug LOGCAT
		Log.v("info", "The getLONG "+cursor.getLong(0));
		Log.v("info", "The setLatLng "+cursor.getString(1)+","+cursor.getString(2));

		/* Set atribut pada objek barang dengan
		 * data kursor yang diambil dari database*/
		barang.setId(cursor.getLong(0));
		barang.setNama_barang(cursor.getString(1));
		barang.setMerk_barang(cursor.getString(2));
		barang.setHarga_barang(cursor.getString(3));

		//kembalikan sebagai objek barang
		return barang;
	}
}

Untuk penjelasan tiap baris kodenya, bisa dibaca pada komentar-komentar yang ada di atas. Adapun cara kerjanya sebagai berikut, pertama-tama kita kembali ke kelas CreateData.java. Apabila kita telah mengisi data barang dan mengklik tombol submit, data barang tersebut akan dilempar ke Controller. Kemudian kontroler akan menerima inputan data barang tersebut dan memasangkannya sesuai dengan nama kolom pada database menggunakan ContentValues. Untuk selanjutnya dimasukkan ke database.

Setelah dimasukkan, data akan dicek kembali menggunakan SQL select yang mengembalikan data berupa Cursor. Data kursor tersebut kemudian akan diubah menjadi objek barang, dan dilemparkan lagi ke kelas CreateData untuk kemudian mengkonfirmasikan data apa saja yang barusan kita masukkan.

Yang terakhir, kita akan memodifikasi Android Manifest. Kita pindahkan intent filter launcher nya ke Activity Menu supaya aktivitas tersebut yang dijalankan pertama kali apabila aplikasi dibuka.

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="id.twooh.appinventory"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="15" />

    <application
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name="id.twooh.appinventory.CreateData"
            android:label="@string/title_activity_main" >
        </activity>
        <activity
            android:name=".Menu"
            android:label="@string/title_activity_main" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

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

That’s all. 😉

Demo Program

Ketika kita running aplikasinya-nya, beginilah hasilnya :

Tampilan aktivitas Main Menu

Main Menu Aplikasi InventoriMain Menu Aplikasi Inventori

Apabila kita klik tombol “Tambah Data”, maka kita akan masuk ke aktivitas CreateData

Field untuk menginputkan Data BarangInput Data Barang pada Aplikasi Inventaris

Kita coba inputkan sembarang data, seperti berikut :

Sample Data Barang pada AplikasiSample Data Barang pada Aplikasi

Ketika kita klik tombol Submit, akan muncul notifikasi Toast sesuai dengan data barang yang kita masukkan

Notifikasi input barang berhasilNotifikasi input barang berhasil

Conclusion

Postingan ini adalah bagian pertama dari fitur CRUD(Create, Read, Update, Delete) yang akan kita implementasikan. Semoga berguna, nantikan tutorial selanjutnya tentang Read/Lihat Data. 😀

Untuk demo-nya, kalian bisa cek dan download AppInventory di Google Play Store.

Jangan sungkan untuk bertanya apabila ada yang kurang mengerti, silahkan tulis lewat komentar di bawah. 😉



Download aplikasi kami di Google Play Store