1. Model ER
2. Transformasi ER-D ke Relasi
3. Relasi
public class SqliteManager { public static final int VERSI_DATABASE= 1; public static final String NAMA_DATABASE = "dbCrudSqlite"; public static final String NAMA_TABEL = "tbAgenda"; public static final String FIELD_ID = "_id"; public static final int POSISI_ID = 0; public static final String FIELD_JUDUL = "judul"; public static final int POSISI_JUDUL = 1; public static final String FIELD_DESKRIPSI = "deskripsi"; public static final int POSISI_DESKRIPSI = 2; public static final String FIELD_WAKTU = "waktu"; public static final int POSISI_WAKTU = 3; public static final String[] FIELD_TABEL ={ SqliteManager.FIELD_ID, SqliteManager.FIELD_JUDUL, SqliteManager.FIELD_DESKRIPSI, SqliteManager.FIELD_WAKTU }; private Context crudContext; private SQLiteDatabase crudDatabase; private SqliteManagerHelper crudHelper; private static class SqliteManagerHelper extends SQLiteOpenHelper { private static final String BUAT_TABEL = "create table " + NAMA_TABEL + " (" + SqliteManager.FIELD_ID + " integer primary key autoincrement, " + SqliteManager.FIELD_JUDUL + " text not null, " + SqliteManager.FIELD_DESKRIPSI + " text not null," + SqliteManager.FIELD_WAKTU + " text not null " + ");"; public SqliteManagerHelper(Context context) { super(context, NAMA_DATABASE, null, VERSI_DATABASE); } @Override public void onCreate(SQLiteDatabase database) { database.execSQL(BUAT_TABEL); } @Override public void onUpgrade(SQLiteDatabase database, int oldVersion, int newVersion) {} } public SqliteManager(Context context) { crudContext = context; } public void bukaKoneksi() throws SQLException { crudHelper = new SqliteManagerHelper(crudContext); crudDatabase = crudHelper.getWritableDatabase(); } public void tutupKoneksi() { crudHelper.close(); crudHelper = null; crudDatabase = null; } public long insertData(ContentValues values) { return crudDatabase.insert(NAMA_TABEL, null, values); } public boolean updateData(long rowId, ContentValues values) { return crudDatabase.update(NAMA_TABEL, values, SqliteManager.FIELD_ID + "=" + rowId, null) > 0; } public boolean hapusData(long rowId) { return crudDatabase.delete(NAMA_TABEL, SqliteManager.FIELD_ID + "=" + rowId, null) > 0; } public Cursor bacaData() { return crudDatabase.query(NAMA_TABEL,FIELD_TABEL,null, null, null, null,SqliteManager.FIELD_JUDUL + " DESC"); } public Cursor bacaDataTerseleksi(long rowId) throws SQLException { Cursor cursor = crudDatabase.query(true, NAMA_TABEL,FIELD_TABEL,FIELD_ID + "=" + rowId,null, null, null, null, null); cursor.moveToFirst(); return cursor; } public ContentValues ambilData(String tempat, String lat, String lng) { ContentValues values = new ContentValues(); values.put(SqliteManager.FIELD_JUDUL, tempat); values.put(SqliteManager.FIELD_DESKRIPSI, lat); values.put(SqliteManager.FIELD_WAKTU, lng); return values; } }Class SqliteManager di atas akan kita panggil dari sebuah activity. Data yang ada di dalam database sqlite ditampilkan ke dalam listview. Untuk menambah menu, form tambah menu bisa diakses dengan menekan tombol menu. Dan jika ingin melakukan edit atau hapus data, bisa diakses dengan melakukan tap pada salah satu list, maka akan muncul 2 pilihan (edit dan hapus). CrudSqliteActivity.java
public class CrudSqliteActivity extends ListActivity { private SqliteManager sqliteDB; private SimpleCursorAdapter mCursorAdapter; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); sqliteDB = new SqliteManager(this); sqliteDB.bukaKoneksi(); Cursor cursor = sqliteDB.bacaData(); startManagingCursor(cursor); String[] awal = new String[] { SqliteManager.FIELD_JUDUL }; int[] tujuan = new int[] { R.id.rowtext }; mCursorAdapter = new SimpleCursorAdapter(this, R.layout.baris, cursor, awal, tujuan); mCursorAdapter.setViewBinder(new SimpleCursorAdapter.ViewBinder() { public boolean setViewValue(View view, Cursor cursor, int columnIndex) { if (columnIndex == SqliteManager.POSISI_ID) { TextView textView = (TextView) view; textView.setText(""); return true; } return false; } }); setListAdapter(mCursorAdapter); registerForContextMenu(getListView()); } @Override protected void onDestroy() { super.onDestroy(); sqliteDB.tutupKoneksi(); } public boolean onCreateOptionsMenu(Menu menu) { MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.opt_menu, menu); return true; } public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case R.id.tambah: Intent intent = new Intent(this, SimpanActivity.class); intent.putExtra("judul", ""); intent.putExtra("deskripsi", ""); intent.putExtra("waktu", ""); startActivity(intent); return true; default: return super.onOptionsItemSelected(item); } } @Override public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) { super.onCreateContextMenu(menu, v, menuInfo); MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.list_menu, menu); } @Override public boolean onContextItemSelected(MenuItem item) { AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo(); switch (item.getItemId()) { case R.id.menu_edit: startDetail(info.id, false); return true; case R.id.menu_delete: hapus(info.id); return true; default: return super.onContextItemSelected(item); } } public void hapus(long rowId) { sqliteDB.hapusData(rowId); mCursorAdapter.getCursor().requery(); } public static final String EXTRA_ROWID = "rowid"; @Override protected void onListItemClick(ListView l, View v, int position, long rowId) { super.onListItemClick(l, v, position, rowId); tampilTempatTerseleksi(rowId); } public void tampilTempatTerseleksi(Long mRowId) { Cursor cursor = sqliteDB.bacaDataTerseleksi(mRowId); Intent intent = new Intent(this, DetailActivity.class); intent.putExtra("judul", cursor.getString(SqliteManager.POSISI_JUDUL)); intent.putExtra("deskripsi", cursor.getString(SqliteManager.POSISI_DESKRIPSI)); intent.putExtra("waktu", cursor.getString(SqliteManager.POSISI_WAKTU)); startActivity(intent); } public void startDetail(long rowId, boolean baru) { Intent intent = new Intent(this, SimpanActivity.class); if (!baru) { intent.putExtra(EXTRA_ROWID, rowId); } startActivity(intent); } }SimpanActivity.java
public class SimpanActivity extends Activity { private SqliteManager sqliteDB; private Long id; private EditText teks_judul; private EditText teks_deskripsi; private EditText teks_waktu; String judul,deskripsi,waktu; public static final String SIMPAN_DATA = "simpan"; @Override protected void onCreate(Bundle bundle) { super.onCreate(bundle); setContentView(R.layout.simpan); teks_judul = (EditText) findViewById(R.id.edit_judul); teks_deskripsi = (EditText) findViewById(R.id.edit_deskripsi); teks_waktu = (EditText) findViewById(R.id.edit_waktu); id = null; if (bundle == null) { Bundle extras = getIntent().getExtras(); if (extras != null && extras.containsKey(CrudSqliteActivity.EXTRA_ROWID)) { id = extras.getLong(CrudSqliteActivity.EXTRA_ROWID); } else { judul = extras.getString("judul"); deskripsi = extras.getString("deskripsi"); waktu = extras.getString("waktu"); teks_judul.setText(judul); teks_deskripsi.setText(deskripsi); teks_waktu.setText(waktu); } } sqliteDB = new SqliteManager(this); sqliteDB.bukaKoneksi(); pindahData(); Button button = (Button) findViewById(R.id.btn_simpan); button.setOnClickListener(new View.OnClickListener() { public void onClick(View view) { simpan(); finish(); } }); } @Override protected void onDestroy() { super.onDestroy(); sqliteDB.tutupKoneksi(); } private void pindahData() { if (id != null) { Cursor cursor = sqliteDB.bacaDataTerseleksi(id); teks_judul.setText(cursor.getString(SqliteManager.POSISI_JUDUL)); teks_deskripsi.setText(cursor.getString(SqliteManager.POSISI_DESKRIPSI)); teks_waktu.setText(cursor.getString(SqliteManager.POSISI_WAKTU)); cursor.close(); } } private void simpan() { String judul = teks_judul.getText().toString(); String deskripsi = teks_deskripsi.getText().toString(); String waktu = teks_waktu.getText().toString(); if (id != null) { sqliteDB.updateData(id, sqliteDB.ambilData(judul, deskripsi, waktu)); } else { id = sqliteDB.insertData(sqliteDB.ambilData(judul, deskripsi, waktu)); } } protected void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); outState.putLong(SIMPAN_DATA, id); } }