Kamis, 08 Juni 2017

Membuat CRUD SQLite Database

“Membuat CRUD SQLite Database”

- Buat Project android disini saya beri nama SQL
- Kemudian pada folder layout perhatikan gambar berikut :

 

 
- Ubahlah inputdata.xml seperti pada script di bawah ini :

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
   android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:padding="5px" >

   <TextView
       android:id="@+id/txt_title"
       android:layout_width="fill_parent"
       android:layout_height="wrap_content"
       android:text="title"
       android:textSize="20px" />

   <EditText
       android:id="@+id/data_name"
       android:layout_width="fill_parent"
       android:layout_height="wrap_content"
       android:hint="Name" />

   <EditText
       android:id="@+id/data_address"
       android:layout_width="fill_parent"
       android:layout_height="52dp"
       android:gravity="top"
       android:hint="Alamat"
       android:singleLine="false" />

   <EditText
       android:id="@+id/data_phone"
       android:layout_width="fill_parent"
       android:layout_height="wrap_content"
       android:phoneNumber="true"
       android:hint="No Telpon" />

   <Button
       android:id="@+id/submit_button"
       android:layout_width="fill_parent"
       android:layout_height="wrap_content"
       android:textStyle="bold"
       android:text="SAVE" />

   <Button
       android:id="@+id/cancel_button"
       android:layout_width="fill_parent"
       android:layout_height="wrap_content"
       android:textStyle="bold"
       android:text="CANCEL" />

</LinearLayout>


- Ubahlah listitem.xml seperti pada script di bawah ini :

<?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:background="#ffffff"
   android:orientation="vertical" >

   <CheckedTextView
       android:id="@+id/txt_name"
       android:layout_width="fill_parent"
       android:layout_height="wrap_content"
       android:gravity="center_vertical"
       android:text="”Name Customer"
       android:checkMark="?android:attr/listChoiceIndicatorMultiple" />

   <TextView
       android:id="@+id/txt_id"
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:visibility="gone" />

</LinearLayout>



- Ubahlah listview.xml seperti pada script di bawah ini :

<?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" >

   <ListView
       android:id="@+id/list_data"
       android:layout_width="wrap_content"
       android:layout_height="204dp"
       android:layout_above="@+id/add_button"
       android:layout_weight="0.74" />

   <TextView
       android:id="@+id/list_empty"
       android:layout_width="fill_parent"
       android:layout_height="wrap_content"
       android:layout_above="@+id/add_button"
       android:gravity="center_vertical|center_horizontal"
       android:text="Tidak Ada Data" />

   <Button
       android:id="@+id/add_button"
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:textStyle="bold"
       android:text="Add" />

   <Button
       android:id="@+id/update_button"
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:textStyle="bold"
       android:text="Update" />

   <Button
       android:id="@+id/delete_button"
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:layout_alignParentBottom="true"
       android:layout_toRightOf="@id/update_button"
       android:textStyle="bold"
       android:text="Delete" />

   <Button
       android:id="@+id/exit_button"
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:textStyle="bold"
       android:text="Exit" />

</LinearLayout>



- Ubahlah Customer.java seperti pada script di bawah ini :

package com.example.sql;

public class Customer {
    long id;
    String name;
    String address;
    String phone;
    boolean complete;

    public long getId() {
        return id;
    }

    public void setId(long id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }

    public String getPhone() {
        return phone;
    }

    public void setPhone(String phone) {
        this.phone = phone;
    }

    public boolean isComplete() {
        return complete;
    }

    public void setComplete(boolean complete) {
        this.complete = complete;
    }

    // ��������������-
    public void toggleComplete() {
        complete = !complete;
    }
}



- Ubahlah CustomerListAdapter.java seperti pada script di bawah ini :


package com.example.sql;

import java.util.ArrayList;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.CheckedTextView;
import android.widget.TextView;

public class CustomerListAdapter extends BaseAdapter {
    ArrayList<Customer> cust;
    Context context;

    public CustomerListAdapter(Context context, ArrayList<Customer> custs) {
        super();
        this.cust = custs;
        this.context = context;
    }

    @Override
    public int getCount() {
        return cust.size();
    }

    @Override
    public Customer getItem(int position) {
        return (null == cust) ? null : cust.get(position);
    }

    @Override
    public long getItemId(int position) {
        return position;
    }

    public static class ViewHolder {
        public CheckedTextView nameView;
        public TextView idView;
        public TextView phoneView;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        ViewHolder holder;
        View vi = convertView;

        if (null == convertView) {
            LayoutInflater infalInflater = (LayoutInflater) context
                    .getSystemService(Context.LAYOUT_INFLATER_SERVICE);

            vi = infalInflater.inflate(R.layout.listitem, null);
            holder = new ViewHolder();
            holder.nameView = (CheckedTextView) vi.findViewById(R.id.txt_name);
            holder.idView = (TextView) vi.findViewById(R.id.txt_id);
            holder.phoneView = (TextView) vi.findViewById(R.id.data_phone);
            vi.setTag(holder);
        } else
            holder = (ViewHolder) vi.getTag();

        String txtName = cust.get(position).getName() + "-"
                + cust.get(position).getAddress() + "-"
                + cust.get(position).getPhone();
        String txtId = String.valueOf(cust.get(position).getId());
        boolean check = cust.get(position).isComplete();

        holder.nameView.setText(txtName);
        holder.nameView.setChecked(check);
        holder.idView.setText(txtId);

        return vi;

    }

    public void forceReload() {
        notifyDataSetChanged();
    }

    public void toggleDataCompleteAtPosition(int position) {
        Customer cust = getItem(position);
        cust.toggleComplete();
        notifyDataSetChanged();
    }

    public Long[] removeCheckedCustomer() {
        ArrayList<Customer> completedTasks = new ArrayList<Customer>();
        ArrayList<Long> completedIds = new ArrayList<Long>();
        for (Customer dtCust : cust) {
            if (dtCust.isComplete()) {
                completedTasks.add(dtCust);
                completedIds.add(dtCust.getId());
            }
        }
        cust.removeAll(completedTasks);
        notifyDataSetChanged();
        return completedIds.toArray(new Long[] {});
    }

    public Customer getCheckedCustomer() {
        Customer newCust = new Customer();
        for (Customer dtCust : cust) {
            if (dtCust.isComplete()) {
                newCust = dtCust;
                break;
            }
        }
        return newCust;
    }
}


- Ubahlah CustomerSQLHelper.java seperti pada script di bawah ini :

package com.example.sql;

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;

public class CustomerSQLHelper extends SQLiteOpenHelper {

    public static final String DB_NAME = "customer_db.sqllite";
    public static final int VERSION = 1;

    public static final String TASKS_TABLE = "customer";
    public static final String TASK_ID = "id";
    public static final String TASK_NAME = "name";
    public static final String TASK_ADDRESS = "address";
    public static final String TASK_PHONE = "phone";
    public static final String TASK_COMPLETE = "complete";

    public CustomerSQLHelper(Context context) {
        super(context, DB_NAME, null, VERSION);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        createTable(db);
    }

    private void createTable(SQLiteDatabase db) {
        db.execSQL("create table " + TASKS_TABLE + " ( " + TASK_ID
                + " integer primary key autoincrement not null, " + TASK_NAME
                + " text, " + TASK_ADDRESS + " text, " + TASK_PHONE + " text, "
                + TASK_COMPLETE + " text " + ");");
    }

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

- Ubahlah DatabaseApps.java seperti pada script di bawah ini :

package com.example.sql;

import java.util.ArrayList;
import android.app.Activity;
import android.content.Intent;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.AdapterView;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.AdapterView.OnItemLongClickListener;

public class DatabaseApps extends Activity {

    ArrayList<Customer> currentData;
    SQLiteDatabase database;
    CustomerListAdapter adapter;
    ListView list;
    CustomerSQLHelper helper;
    Customer cust;

    Button btnSubmit, btnCancel;
    TextView txtTitle;
    EditText dtName, dtAddress, dtPhone;
    Utils util;

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.listview);

        util = new Utils(this);
        list = (ListView) findViewById(R.id.list_data);

        CustomerSQLHelper helper = new CustomerSQLHelper(this);
        database = helper.getWritableDatabase();

        currentData = new ArrayList<Customer>();
        // �- load data �-
        currentData = util.loadData();

        adapter = new CustomerListAdapter(this, currentData);
        list.setAdapter(adapter);
        list.setEmptyView(findViewById(R.id.list_empty));

        list.setOnItemClickListener(new OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View v,
                    int position, long id) {
                adapter.toggleDataCompleteAtPosition(position);
            }
        });

        list.setOnItemLongClickListener(new OnItemLongClickListener() {
            @Override
            public boolean onItemLongClick(AdapterView<?> parent, View v,
                    int position, long id) {

                Customer c = adapter.getItem(position);
                util.onShowData(c, DatabaseApps.this);
                return false;

            }
        });

        // set button click
        onButtonClick();
    }

    // ���������������-
    @Override
    protected void onResume() {
        super.onResume();
        adapter.forceReload();
    }

    // ����������������
    public void onButtonClick() {
        Button btnAdd = (Button) findViewById(R.id.add_button);
        btnAdd.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                onCreateWidgetData(1, new Customer());
            }
        });
        Button btnUpdate = (Button) findViewById(R.id.update_button);
        btnUpdate.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                Customer c = adapter.getCheckedCustomer();
                if (!c.getName().equals(""))
                    onCreateWidgetData(2, c);
                else {
                    Toast.makeText(DatabaseApps.this, "Harus centang satu",
                            Toast.LENGTH_LONG).show();
                }
            }
        });
        Button btnDelete = (Button) findViewById(R.id.delete_button);
        btnDelete.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                Customer c = adapter.getCheckedCustomer();
                onDeleteData(c.getId());
            }
        });
        Button btnExit = (Button) findViewById(R.id.exit_button);
        btnExit.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                finish();
                android.os.Process.killProcess(android.os.Process.myPid());
            }
        });
    }

    public void onCreateWidgetData(int param, final Customer getCust) {
        switch (param) {
        // add data new
        case 1:
            widgetAdd();
            break;
        // update existing data
        case 2:
            widgetUpdate(getCust);
            break;
        }
    }

    public void widgetAdd() {
        setContentView(R.layout.inputdata);
        txtTitle = (TextView) findViewById(R.id.txt_title);
        txtTitle.setText("Add Data");
        btnSubmit = (Button) findViewById(R.id.submit_button);

        btnSubmit.setOnClickListener(new OnClickListener() {
            // pengecekan
            @Override
            public void onClick(View v) {
                dtName = (EditText) findViewById(R.id.data_name);
                dtAddress = (EditText) findViewById(R.id.data_address);
                dtPhone = (EditText) findViewById(R.id.data_phone);
                if (dtName.getText().length() < 1
                        || dtAddress.getText().length() < 1
                        || dtPhone.getText().length() < 1) {
                    Toast.makeText(DatabaseApps.this, "Check your input�",
                            Toast.LENGTH_SHORT).show();
                } else {
                    cust = new Customer();
                    cust.setName(dtName.getText().toString());
                    cust.setAddress(dtAddress.getText().toString());
                    cust.setPhone(dtPhone.getText().toString());
                    cust.setComplete(false);
                    util.onSaveData(cust);
                    onCancel();
                }
            }
        });
        btnCancel = (Button) findViewById(R.id.cancel_button);
        btnCancel.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                onCancel();
            }
        });
    }

    public void widgetUpdate(final Customer getCust) {
        setContentView(R.layout.inputdata);
        txtTitle = (TextView) findViewById(R.id.txt_title);
        txtTitle.setText("Update Data");
        dtName = (EditText) findViewById(R.id.data_name);
        dtName.setText(getCust.getName());
        dtAddress = (EditText) findViewById(R.id.data_address);
        dtAddress.setText(getCust.getAddress());
        dtPhone = (EditText) findViewById(R.id.data_phone);
        dtPhone.setText(getCust.getPhone());
        btnSubmit = (Button) findViewById(R.id.submit_button);
        btnSubmit.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                dtName = (EditText) findViewById(R.id.data_name);
                dtAddress = (EditText) findViewById(R.id.data_address);
                dtPhone = (EditText) findViewById(R.id.data_phone);
                if (dtName.getText().length() < 1
                        || dtAddress.getText().length() < 1
                        || dtPhone.getText().length() < 1) {
                    Toast.makeText(DatabaseApps.this, "Check your input�",
                            Toast.LENGTH_SHORT);
                } else {
                    getCust.setName(dtName.getText().toString());
                    getCust.setAddress(dtAddress.getText().toString());
                    getCust.setPhone(dtPhone.getText().toString());
                    util.onUpdateData(getCust);
                    onCancel();
                }
            }
        });
        btnCancel = (Button) findViewById(R.id.cancel_button);
        btnCancel.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                onCancel();
            }
        });
    }

    public void onDeleteData(long id) {
        // Long[] ids = adapter.removeCheckedCustomer();
        // deleteData(ids);
        deleteData(new Long[] { id });
        currentData = util.loadData();
        adapter = new CustomerListAdapter(this, currentData);
        list.setAdapter(adapter);
    }

    @SuppressWarnings("static-access")
    public void deleteData(Long[] ids) {
        StringBuffer idList = new StringBuffer();
        for (int i = 0; i < ids.length; i++) {
            idList.append(ids[i]);
            if (i < ids.length - 1) {
                idList.append(",");
            }
        }
        String where = String.format("%s in (%s)", CustomerSQLHelper.TASK_ID,
                idList);
        database.delete(CustomerSQLHelper.TASKS_TABLE, where, null);
    }

    public void onCancel() {
        Intent newIntent = new Intent().setClass(DatabaseApps.this,
                DatabaseApps.class);
        startActivity(newIntent);
        finish();
    }
}


- Ubahlah Utils.java seperti pada script di bawah ini :

package com.example.sql;

import java.util.ArrayList;
import android.app.AlertDialog;
import android.content.ContentValues;
import android.content.Context;
import android.content.DialogInterface;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;

public class Utils {
    CustomerSQLHelper helper;
    SQLiteDatabase database;

    public Utils(Context ctx) {
        helper = new CustomerSQLHelper(ctx);
        database = helper.getWritableDatabase();
    }

    @SuppressWarnings("static-access")
    public ArrayList<Customer> loadData() {
        ArrayList<Customer> currentData = new ArrayList<Customer>();
        Cursor dataCursor = database.query(CustomerSQLHelper.TASKS_TABLE,
                new String[] { CustomerSQLHelper.TASK_ID,
                        CustomerSQLHelper.TASK_NAME,
                        CustomerSQLHelper.TASK_ADDRESS,
                        CustomerSQLHelper.TASK_PHONE,
                        CustomerSQLHelper.TASK_COMPLETE }, null, null, null,
                null, String.format("%s, %s", CustomerSQLHelper.TASK_COMPLETE,
                        CustomerSQLHelper.TASK_NAME));

        dataCursor.moveToFirst();
        Customer t;

        if (!dataCursor.isAfterLast()) {
            do {
                int id = dataCursor.getInt(0); // coloum ID
                String name = dataCursor.getString(1); // coloum name
                String addr = dataCursor.getString(2); // coloum address
                String phon = dataCursor.getString(3); // coloum phone
                String boolValue = dataCursor.getString(4); // coloum complete
                boolean complete = Boolean.parseBoolean(boolValue);
                t = new Customer();
                t.setId(id);
                t.setName(name);
                t.setAddress(addr);
                t.setPhone(phon);
                t.setComplete(complete);
                currentData.add(t);
            } while (dataCursor.moveToNext());
        }
        /*
        * while (dataCursor.moveToNext()) { }
        */
        dataCursor.close();
        return currentData;
    }

    @SuppressWarnings("static-access")
    public void onSaveData(Customer getCust) {
        assert (null != getCust);
        ContentValues values = new ContentValues();
        values.put(CustomerSQLHelper.TASK_NAME, getCust.getName());
        values.put(CustomerSQLHelper.TASK_ADDRESS, getCust.getAddress());
        values.put(CustomerSQLHelper.TASK_PHONE, getCust.getPhone());
        values.put(CustomerSQLHelper.TASK_COMPLETE, Boolean.toString(false));
        getCust.setId(database.insert(CustomerSQLHelper.TASKS_TABLE, null,
                values));
    }

    @SuppressWarnings("static-access")
    public void onUpdateData(Customer getCust) {
        assert (null != getCust);
        ContentValues values = new ContentValues();
        values.put(CustomerSQLHelper.TASK_NAME, getCust.getName());
        values.put(CustomerSQLHelper.TASK_ADDRESS, getCust.getAddress());
        values.put(CustomerSQLHelper.TASK_PHONE, getCust.getPhone());
        values.put(CustomerSQLHelper.TASK_COMPLETE,
                Boolean.toString(getCust.isComplete()));
        long id = getCust.getId();
        String where = String.format("%s = %d", CustomerSQLHelper.TASK_ID, id);
        database.update(CustomerSQLHelper.TASKS_TABLE, values, where, null);
    }

    AlertDialog alert;

    public void onShowData(Customer cust, Context ctx) {
        final Customer thisCust = cust;
        alert = new AlertDialog.Builder(ctx)
                .setIcon(R.drawable.ic_launcher)
                .setTitle("Display Data")
                .setMessage(
                        " ���� Customer ����-\n" + "ID: " + thisCust.getId()
                                + "\n" + "Name: " + thisCust.getName() + "\n"
                                + "Adress: " + thisCust.getAddress() + "\n"
                                + "Phone: " + thisCust.getPhone() + "\n")
                .setNegativeButton("Close",
                        new DialogInterface.OnClickListener() {
                            @Override
                            public void onClick(DialogInterface dialog,
                                    int whichButton) {
                                alert.cancel();
                            }
                        }).create();
        alert.show();
    }
}

 
- Hasil Running awal :
 
 



- Hasil Running Input Data
 


Hasil :

 

Tidak ada komentar:

Posting Komentar