android - How do I save two sets of information in different tables in the same SQLite Database? -
i'm working on budgeting app , ask user add income , expenses , have sum of 2 sets of data in overview activity. researched online , found putting values 2 different tables best way.(if have other ideas please tell me.)
how put income , expense on different tables , how link them sum?
have completed saving data expense in 1 table not know how make table income. forgive me not knowing best way because new using sqlite.
add_expense.java
import android.content.intent; import android.os.bundle; import android.support.design.widget.floatingactionbutton; import android.support.design.widget.snackbar; import android.support.v7.app.appcompatactivity; import android.support.v7.widget.toolbar; import android.view.view; import android.widget.adapterview; import android.widget.arrayadapter; import android.widget.edittext; import android.widget.spinner; import android.widget.toast; public class add_expense extends appcompatactivity { databasehelper mydbexpense; edittext editamountexpense, editdateexpense, editnotesexpense; @override protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.activity_add_expense); toolbar toolbar = (toolbar) findviewbyid(r.id.toolbar_expense); setsupportactionbar(toolbar); getsupportactionbar().settitle("add expense"); toolbar.setnavigationicon(getresources().getdrawable(r.drawable.ic_back)); getsupportactionbar().setdisplayhomeasupenabled(true); mydbexpense = new databasehelper(this); editamountexpense = (edittext) findviewbyid(r.id.amount_expense); editdateexpense = (edittext) findviewbyid(r.id.date_expense); editnotesexpense = (edittext) findviewbyid(r.id.notes_expense); adddata(); spinner spinner; arrayadapter<charsequence> adapter; spinner = (spinner) findviewbyid(r.id.categorydropdown_expense); adapter = arrayadapter.createfromresource(this, r.array.expensecategory_array, android.r.layout.simple_spinner_item); adapter.setdropdownviewresource(android.r.layout.simple_spinner_dropdown_item); spinner.setadapter(adapter); spinner.setonitemselectedlistener(new adapterview.onitemselectedlistener() { @override public void onitemselected(adapterview<?> parent, view view, int position, long id) { toast.maketext(getbasecontext(), parent.getitematposition(position) + " selected category", toast.length_long).show(); } @override public void onnothingselected(adapterview<?> parent) { } }); toolbar.setnavigationonclicklistener(new view.onclicklistener() { @override public void onclick(view view) { onbackpressed(); } }); } public void adddata(){ floatingactionbutton fab2 = (floatingactionbutton) findviewbyid(r.id.fab_tick_expense); fab2.setonclicklistener(new view.onclicklistener() { @override public void onclick(view view) { boolean isinserted; if (mydbexpense.insertdata( editamountexpense.gettext().tostring(), editdateexpense.gettext().tostring(), editnotesexpense.gettext().tostring())) { isinserted = true; intent intent=new intent(add_expense.this,mainactivity.class); startactivity(intent); } else isinserted = false; if(isinserted == true) toast.maketext(add_expense.this,"data inserted",toast.length_long).show(); else toast.maketext(add_expense.this,"data not inserted",toast.length_long).show(); } }); } }
the same has been done create add_income.java.
databasehelper.java
import android.content.contentvalues; import android.content.context; import android.database.cursor; import android.database.sqlite.sqlitedatabase; import android.database.sqlite.sqliteopenhelper; import android.view.view; public class databasehelper extends sqliteopenhelper { private static final string tag = "databasehelper"; public static final string database_name = "expense.db"; public static final string table_name = "expense_table"; public static final string col_1 = "id"; public static final string col_2 = "amount"; public static final string col_3 = "date"; public static final string col_4 = "notes"; public databasehelper(context context) { super(context, database_name, null, 3); } @override public void oncreate(sqlitedatabase db) { db.execsql("create table " + table_name + " (id integer primary key autoincrement,amount integer,date integer,notes text)"); } @override public void onupgrade(sqlitedatabase db, int oldversion, int newversion) { db.execsql("drop table if exists " + table_name); oncreate(db); } public boolean insertdata(string amount, string date, string notes) { sqlitedatabase db = this.getwritabledatabase(); contentvalues contentvalues = new contentvalues(); contentvalues.put(col_2, amount); contentvalues.put(col_3, date); contentvalues.put(col_4, notes); long result = db.insert(table_name, null, contentvalues); if (result == -1) return false; else return true; } public cursor getdata() { sqlitedatabase db = this.getwritabledatabase(); cursor res = db.rawquery("select * " + table_name, null); return res; } public cursor getitemid(string name){ sqlitedatabase db = this.getwritabledatabase(); string query = "select " + col_1 + " " + table_name + " " + col_2 + " = '" + name + "'"; cursor data = db.rawquery(query, null); return data; } public boolean updatedata(string id, string amount, string date, string notes) { sqlitedatabase db = this.getwritabledatabase(); contentvalues contentvalues = new contentvalues(); contentvalues.put(col_1, id); contentvalues.put(col_2, amount); contentvalues.put(col_3, date); contentvalues.put(col_4, notes); db.update(table_name, contentvalues, "id = ?", new string[]{id}); return true; } public integer deletedata(string id) { sqlitedatabase db = this.getwritabledatabase(); return db.delete(table_name, "id = ?", new string[]{id}); } }
either create 2 tables in oncreate
method of databasehelper
class , handle insert/read accordingly. or if want use single table, use negative values expenses , positive value income.
there number ways handle this. need design , decide how implement it.
Comments
Post a Comment