Android Studio - CRUD Menggunakan SQLite
Hello sobat, hari ini saya akan berbagi tutorial mengenai CRUD menggunakan SQLite, jadi SQLite itu adalah databases opensource yang berukuran kecil yang menggunakan fitur penuh dengan perintah SQL, jadi dalam pembuatan aplikasi ini tidak perlu menambahkan library dalam gradle karena SQLite sudah ada dalam device android, baik selanjutnya kita masuk ke langkah pembuatan.
Manifest
Masukan semua code xml pada manifest
Design Layout<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.codetr.tanwir.siswasqlite"> <application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" 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> <activity android:name=".TambahSiswa" android:label="@string/input"/> <activity android:name=".TampilSiswa" android:label="@string/detail"/> <activity android:name=".UpdateSiswa" android:label="@string/update"/> <activity android:name=".Pencarian"> <intent-filter> <action android:name="android.intent.Pencarian" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </activity> </application> </manifest>
Membuat desig layout dengan struktur
- activity_main.xml
<RelativeLayout 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:background="#ecf0f1" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context=".MainActivity"> <Button android:id="@+id/button2" style="?android:attr/borderlessButtonStyle" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_alignParentStart="true" android:layout_alignParentTop="true" android:drawableLeft="@drawable/icon_add" android:text="@string/tambah" /> <Button android:id="@+id/btnCari" style="?android:attr/borderlessButtonStyle" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_above="@+id/listView1" android:layout_alignParentTop="true" android:layout_toEndOf="@+id/button2" android:layout_toRightOf="@+id/button2" android:drawableLeft="@drawable/ic_search_black_36dp" android:gravity="center_vertical" android:text="@string/pencarian" /> <ListView android:id="@+id/listView1" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_below="@+id/button2" /> </RelativeLayout>
- activity_pencarian.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" android:padding="10dp"> <SearchView android:id="@+id/search_view" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="@drawable/search_view_border" android:iconifiedByDefault="false" android:padding="2dp" android:queryHint="Cari..." /> <ListView android:id="@+id/list_view" android:layout_width="fill_parent" android:layout_height="wrap_content" /> </LinearLayout>
- activity_tambah_siswa.xml
<RelativeLayout 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:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context=".TambahSiswa"> <EditText android:id="@+id/editText1" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignLeft="@+id/textView1" android:layout_below="@+id/textView1"> <requestFocus /> </EditText> <TextView android:id="@+id/textView1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_alignParentTop="true" android:text="NIS" /> <TextView android:id="@+id/textView2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignLeft="@+id/editText1" android:layout_below="@+id/editText1" android:layout_marginTop="10dp" android:text="Nama" /> <EditText android:id="@+id/editText2" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignLeft="@+id/textView2" android:layout_below="@+id/textView2" /> <Button android:id="@+id/button2" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_alignParentStart="true" android:layout_below="@+id/button1" android:text="Kembali" /> <Button android:id="@+id/button1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentEnd="true" android:layout_alignParentLeft="true" android:layout_alignParentRight="true" android:layout_alignParentStart="true" android:layout_below="@+id/editText2" android:layout_marginTop="12dp" android:text="Simpan" /> </RelativeLayout>
- activity_tampil_siswa.xml
<RelativeLayout 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:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context=".TampilSiswa"> <TextView android:id="@+id/textView1" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignParentEnd="true" android:layout_alignParentRight="true" android:layout_alignParentTop="true" android:layout_marginLeft="70dp" android:layout_marginTop="20dp" android:text="TextView" /> <TextView android:id="@+id/textView2" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignRight="@+id/textView1" android:layout_below="@+id/textView1" android:layout_marginLeft="70dp" android:layout_marginTop="20dp" android:text="TextView" /> <TextView android:id="@+id/TextView02" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignBaseline="@+id/textView2" android:layout_alignBottom="@+id/textView2" android:layout_alignLeft="@+id/TextView01" android:text="Nama" /> <TextView android:id="@+id/TextView01" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_above="@+id/textView2" android:layout_alignParentLeft="true" android:text="NIS" /> <Button android:id="@+id/button1" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_alignParentStart="true" android:layout_below="@+id/TextView02" android:layout_marginTop="38dp" android:text="Kembali" /> </RelativeLayout>
- activity_update_siswa.xml
<RelativeLayout 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:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context=".UpdateSiswa"> <EditText android:id="@+id/editText1" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignLeft="@+id/textView1" android:layout_below="@+id/textView1" android:enabled="false" /> <TextView android:id="@+id/textView1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_alignParentTop="true" android:text="Nis" /> <TextView android:id="@+id/textView2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignLeft="@+id/editText1" android:layout_below="@+id/editText1" android:layout_marginTop="10dp" android:text="Nama" /> <EditText android:id="@+id/editText2" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignLeft="@+id/textView2" android:layout_below="@+id/textView2"> <requestFocus /> </EditText> <Button android:id="@+id/button1" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_alignParentStart="true" android:layout_below="@+id/editText2" android:layout_marginTop="20dp" android:text="Update" /> <Button android:id="@+id/button2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentEnd="true" android:layout_alignParentLeft="true" android:layout_alignParentRight="true" android:layout_alignParentStart="true" android:layout_below="@+id/button1" android:text="Back" /> </RelativeLayout>
- list_items.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="match_parent" android:orientation="horizontal" android:padding="10dp"> <TextView android:id="@+id/name" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_weight="1" android:padding="5dp" android:textColor="#000000" android:textSize="18dp" /> </LinearLayout>
Membuat class dengan struktur
- DataHelper.java
package com.codetr.tanwir.siswasqlite; import android.content.Context; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteOpenHelper; import android.util.Log; /** * Created by tanwir on 06/06/2016. */ public class DataHelper extends SQLiteOpenHelper { private static final String DATABASE_NAME = "dbsiswa.db"; private static final int DATABASE_VERSION = 1; public DataHelper(Context context) { super(context, DATABASE_NAME, null, DATABASE_VERSION); } @Override public void onCreate(SQLiteDatabase db) { String sql = "create table tbsiswa (nis integer primary key,nama text null);"; Log.d("Data", "onCreate: " + sql); db.execSQL(sql); sql = "INSERT INTO tbsiswa (nis, nama) VALUES " + "('1111', 'TANWIR');"; db.execSQL(sql); } @Override public void onUpgrade(SQLiteDatabase arg0, int arg1, int arg2) { } }
- MainActivity.java
package com.codetr.tanwir.siswasqlite; import android.content.DialogInterface; import android.content.Intent; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.view.Menu; import android.view.MenuInflater; import android.view.View; import android.widget.AdapterView; import android.widget.ArrayAdapter; import android.widget.Button; import android.widget.ListView; import android.widget.SearchView; import android.widget.Toast; /** * Created by tanwir on 06/06/2016. */ public class MainActivity extends AppCompatActivity { private String[] daftar; public ListView ListView01; protected Cursor cursor; private DataHelper dbcenter; public static MainActivity ma; public Button Cari; public ListView lv; public ArrayAdapter<String> adapter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); lv = (ListView) findViewById(R.id.listView1); Button btn = (Button) findViewById(R.id.button2); btn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View arg0) { Intent inte = new Intent(MainActivity.this, TambahSiswa.class); startActivity(inte); } }); ma = this; dbcenter = new DataHelper(this); Cari = (Button) findViewById(R.id.btnCari); Cari.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent i = new Intent("android.intent.Pencarian"); startActivity(i); } }); dbcenter = new DataHelper(this); SQLiteDatabase db = dbcenter.getReadableDatabase(); cursor = db.rawQuery("SELECT * FROM tbsiswa", null); daftar = new String[cursor.getCount()]; cursor.moveToFirst(); for (int cc = 0; cc < cursor.getCount(); cc++) { cursor.moveToPosition(cc); daftar[cc] = cursor.getString(0).toString(); } adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, daftar); lv.setAdapter(adapter); lv.setSelected(true); lv.setOnItemClickListener(new AdapterView.OnItemClickListener() { public void onItemClick(AdapterView arg0, View arg1, int arg2, long arg3) { final String selection = daftar[arg2]; final CharSequence[] dialogitem = {"Lihat Detail", "Update", "Hapus"}; android.support.v7.app.AlertDialog.Builder builder = new android.support.v7.app.AlertDialog.Builder(MainActivity.this); builder.setTitle("Pilihan"); builder.setItems(dialogitem, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int item) { switch (item) { case 0: Intent i = new Intent(getApplicationContext(), TampilSiswa.class); i.putExtra("nis", selection); startActivity(i); break; case 1: Intent in = new Intent(getApplicationContext(), UpdateSiswa.class); in.putExtra("nis", selection); startActivity(in); break; case 2: SQLiteDatabase db = dbcenter.getWritableDatabase(); db.execSQL("delete from tbsiswa where nis = '" + selection + "'"); RefreshList(); Toast.makeText(MainActivity.this, "Berhasil dihapus", Toast.LENGTH_SHORT).show(); break; } } }); builder.create().show(); } }); ((ArrayAdapter) lv.getAdapter()).notifyDataSetInvalidated(); } public void RefreshList() { SQLiteDatabase db = dbcenter.getReadableDatabase(); cursor = db.rawQuery("SELECT * FROM tbsiswa", null); daftar = new String[cursor.getCount()]; cursor.moveToFirst(); for (int cc = 0; cc < cursor.getCount(); cc++) { cursor.moveToPosition(cc); daftar[cc] = cursor.getString(0).toString(); } ListView01 = (ListView) findViewById(R.id.listView1); ListView01.setAdapter(new ArrayAdapter(this, android.R.layout.simple_list_item_1, daftar)); ListView01.setSelected(true); ((ArrayAdapter) ListView01.getAdapter()).notifyDataSetInvalidated(); } @Override public boolean onCreateOptionsMenu(Menu menu) { MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.main, menu); return true; } }
- Pencarian.java
package com.codetr.tanwir.siswasqlite; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.widget.ArrayAdapter; import android.widget.ListView; import android.widget.SearchView; /** * Created by tanwir on 06/06/2016. */ public class Pencarian extends AppCompatActivity implements SearchView.OnQueryTextListener { private String[] daftar; protected Cursor cursor; private DataHelper dbcenter; public ListView lv; public SearchView search_view; private ArrayAdapter<String> adapter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_pencarian); lv = (ListView) findViewById(R.id.list_view); search_view = (SearchView) findViewById(R.id.search_view); dbcenter = new DataHelper(this); SQLiteDatabase db = dbcenter.getReadableDatabase(); cursor = db.rawQuery("SELECT * FROM tbsiswa", null); daftar = new String[cursor.getCount()]; cursor.moveToFirst(); for (int cc = 0; cc < cursor.getCount(); cc++) { cursor.moveToPosition(cc); daftar[cc] = cursor.getString(0).toString(); } adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, daftar); lv.setAdapter(adapter); search_view.setOnQueryTextListener(this); lv.setSelected(true); ((ArrayAdapter) lv.getAdapter()).notifyDataSetInvalidated(); } @Override public boolean onQueryTextChange(String newText) { adapter.getFilter().filter(newText); return false; } @Override public boolean onQueryTextSubmit(String query) { return false; } }
- TambahSiswa.java
package com.codetr.tanwir.siswasqlite; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.view.Menu; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.Toast; /** * Created by tanwir on 06/06/2016. */ public class TambahSiswa extends AppCompatActivity { DataHelper dbHelper; Button button1, button2; EditText text1, text2; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_tambah_siswa); dbHelper = new DataHelper(this); text1 = (EditText) findViewById(R.id.editText1); text2 = (EditText) findViewById(R.id.editText2); button1 = (Button) findViewById(R.id.button1); button2 = (Button) findViewById(R.id.button2); button1.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View arg0) { SQLiteDatabase db = dbHelper.getWritableDatabase(); db.execSQL("insert into tbsiswa(nis, nama) values('" + text1.getText().toString() + "','" + text2.getText().toString() + "')"); Toast.makeText(getApplicationContext(), "Berhasil disimpan", Toast.LENGTH_LONG).show(); MainActivity.ma.RefreshList(); finish(); } }); button2.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View arg0) { finish(); } }); } @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.main, menu); return true; } }
- TampilSiswa.java
package com.codetr.tanwir.siswasqlite; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.view.Menu; import android.view.View; import android.widget.Button; import android.widget.TextView; /** * Created by tanwir on 06/06/2016. */ public class TampilSiswa extends AppCompatActivity { protected Cursor cursor; public DataHelper dbHelper; public Button btnKembali; public TextView text1, text2; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_tampil_siswa); dbHelper = new DataHelper(this); text1 = (TextView) findViewById(R.id.textView1); text2 = (TextView) findViewById(R.id.textView2); SQLiteDatabase db = dbHelper.getReadableDatabase(); cursor = db.rawQuery("SELECT * FROM tbsiswa WHERE nis = '" + getIntent().getStringExtra("nis") + "'", null); cursor.moveToFirst(); if (cursor.getCount() > 0) { cursor.moveToPosition(0); text1.setText(cursor.getString(0).toString()); text2.setText(cursor.getString(1).toString()); } btnKembali = (Button) findViewById(R.id.button1); btnKembali.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View arg0) { finish(); } }); } @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.main, menu); return true; } }
- UpdateSiswa.java
package com.codetr.tanwir.siswasqlite; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.view.Menu; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.Toast; /** * Created by tanwir on 06/06/2016. */ public class UpdateSiswa extends AppCompatActivity { protected Cursor cursor; DataHelper dbHelper; Button button1, button2; EditText text1, text2; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_update_siswa); dbHelper = new DataHelper(this); text1 = (EditText) findViewById(R.id.editText1); text2 = (EditText) findViewById(R.id.editText2); SQLiteDatabase db = dbHelper.getReadableDatabase(); cursor = db.rawQuery("SELECT * FROM tbsiswa WHERE nis = '" + getIntent().getStringExtra("nis") + "'", null); cursor.moveToFirst(); if (cursor.getCount() > 0) { cursor.moveToPosition(0); text1.setText(cursor.getString(0).toString()); text2.setText(cursor.getString(1).toString()); } button1 = (Button) findViewById(R.id.button1); button2 = (Button) findViewById(R.id.button2); button1.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View arg0) { SQLiteDatabase db = dbHelper.getWritableDatabase(); db.execSQL("update tbsiswa set nama='" + text2.getText().toString() + "' where nis='" + text1.getText().toString() + "'"); Toast.makeText(getApplicationContext(), "Berhasil diupdate", Toast.LENGTH_LONG).show(); MainActivity.ma.RefreshList(); finish(); } }); button2.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View arg0) { finish(); } }); } @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.main, menu); return true; } }
Vidio Tutorial
Jika kurang jelas lihat vidio berikut
Output Aplikasi
Sekian artikel dari saya semoga bermanfaat, jika ada yang ditanyakan comment saja di bawah.
boleh minta source codenya?
ReplyDeleteadindazahra2448@gmail.com terimakasih
diartikelnya gan
Deletelihat kodinganya untuk menu xml ny MIN
ReplyDelete