Android Database SQLite Tutorial (II) : Membuat Fungsi Create Data

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 Inventori

Main Menu Aplikasi Inventori

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

Field untuk menginputkan Data Barang

Input Data Barang pada Aplikasi Inventaris

Kita coba inputkan sembarang data, seperti berikut :

Sample Data Barang pada Aplikasi

Sample Data Barang pada Aplikasi

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

Notifikasi input barang berhasil

Notifikasi 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


61 Comments

  1. umi April 18, 2013
    • Herdi Naufal April 18, 2013
      • umi April 28, 2013
        • Herdi Naufal April 28, 2013
  2. Azar July 10, 2013
  3. john-Sihombing August 10, 2013
  4. Faber February 3, 2014
  5. septian February 9, 2014
  6. andrew March 7, 2014
    • Hafizh Herdi Naufal March 12, 2014
      • andrew March 13, 2014
        • Hafizh Herdi Naufal August 20, 2014
      • rama debian April 25, 2015
  7. gigi March 17, 2014
  8. morten June 8, 2014
  9. kineta July 3, 2014
  10. ihsan July 4, 2014
  11. dodi August 19, 2014
    • Hafizh Herdi Naufal August 20, 2014
  12. Yunita Primandari December 26, 2014
  13. lina January 13, 2015
  14. Yanto January 18, 2015
  15. Yusuf Hamdani February 11, 2015
    • Yusuf Hamdani February 11, 2015
  16. Yusuf Hamdani February 11, 2015
    • Hafizh Herdi Naufal February 11, 2015
      • Yusuf Hamdani February 11, 2015
  17. tedjo March 13, 2015
  18. tedjo March 13, 2015
  19. Uyo May 22, 2015
    • Hafizh Herdi May 22, 2015
      • uyo May 26, 2015
  20. Johari May 24, 2015
  21. Herlina June 8, 2015
  22. hendri June 23, 2015
  23. Hendra June 23, 2015
    • hennn August 12, 2016
  24. irul cahya June 26, 2015
  25. ghostmin September 19, 2015
  26. ria September 20, 2015
  27. Putra October 23, 2015
  28. Yans October 26, 2015
  29. Fajar November 2, 2015
    • ihsan March 3, 2017
  30. hs- June 26, 2016
  31. Temms July 18, 2016
  32. frans November 30, 2016
  33. Panca Sinaga December 4, 2016

Leave a Reply