java - how to update integer value in sqlite android -
i having problem updation part of below code. insertion working properly. when added update method addition/subtraction of integer stored in database, code no longer working. says app has closed unfortunately. app not opening. please check update method , make sufficient changes.
first used code accept name , email. code changed accept number , email. variable name , column name has not been changed. please dont confused these.
thank you.
mainactivity.java
package com.sqltut; import android.os.bundle; import android.app.activity; import android.content.intent; import android.database.cursor; import android.view.menu; import android.view.view; import android.widget.button; import android.widget.edittext; import android.widget.toast; public class mainactivity extends activity { button save,load,updatebtn; edittext name,email,update; datahandler handler; @override protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.activity_main); save=(button) findviewbyid(r.id.save); load=(button) findviewbyid(r.id.load); name=(edittext) findviewbyid(r.id.name); email=(edittext) findviewbyid(r.id.email); save.setonclicklistener(new view.onclicklistener() { @override public void onclick(view v) { // todo auto-generated method stub string getname=name.gettext().tostring(); string getemail=email.gettext().tostring(); int number = integer.parseint(getname); handler=new datahandler(getbasecontext()); handler.open(); long id=handler.insertdata(number, getemail); toast.maketext(getbasecontext(), "data inserted", toast.length_long).show(); handler.close(); } }); load.setonclicklistener(new view.onclicklistener() { @override public void onclick(view v) { // todo auto-generated method stub string getemail; integer getname; getname=0; getemail=""; handler=new datahandler(getbasecontext()); handler.open(); cursor c=handler.returndata(); if(c.movetofirst()) { { getname=c.getint(0); getemail=c.getstring(1); }while(c.movetonext()); } handler.close(); toast.maketext(getbasecontext(), "name:"+getname+" , email:"+getemail,toast.length_long).show(); } }); updatebtn.setonclicklistener(new view.onclicklistener() { @override public void onclick(view arg0) { // todo auto-generated method stub int number,flag=0; //flag check addition or subtraction string getupdate=update.gettext().tostring(); number=integer.parseint(getupdate); handler=new datahandler(getbasecontext()); handler.open(); handler.updatedata(number,flag); //subtraction: flag=0, addition: flag=1 handler.close(); } }); //to call next activity /* button createappointment = (button)findviewbyid(r.id.next); createappointment.setonclicklistener(new view.onclicklistener() { @override public void onclick(view v) { // todo auto-generated method stub intent myintent = new intent(mainactivity.this, page2.class); mainactivity.this.startactivity(myintent); } }); */ } @override public boolean oncreateoptionsmenu(menu menu) { // inflate menu; adds items action bar if present. getmenuinflater().inflate(r.menu.main, menu); return true; } }
datahandler.java
package com.sqltut; import android.content.contentvalues; import android.content.context; import android.database.cursor; import android.database.sqlexception; import android.database.sqlite.sqlitedatabase; import android.database.sqlite.sqliteopenhelper; public class datahandler { public static final string name="name"; public static final string email="email"; public static final string table_name="mytable"; public static final string data_base_name="mydatabase"; public static final int database_version=1; public static final string table_create="create table mytable(name text not null, email text not null);"; databasehelper dbhelper; context ctx; sqlitedatabase db; public datahandler(context ctx) { this.ctx = ctx; dbhelper=new databasehelper(ctx); } private static class databasehelper extends sqliteopenhelper { public databasehelper(context ctx) { super(ctx,data_base_name,null,database_version); } @override public void oncreate(sqlitedatabase db) { try{ db.execsql(table_create); } catch(sqlexception e) { e.printstacktrace(); } } @override public void onupgrade(sqlitedatabase db, int oldversion, int newversion) { // todo auto-generated method stub db.execsql("drop table if exists mytable "); oncreate(db); } } public datahandler open() { db=dbhelper.getwritabledatabase(); return this; } public void close() { dbhelper.close(); } public long insertdata(integer name, string email) { contentvalues content=new contentvalues(); content.put(name, name); content.put(email,email); return db.insert(table_name, null, content); } public void updatedata(integer number,integer flag) { db = dbhelper.getreadabledatabase(); string select = "select name " + table_name ; cursor c = db.rawquery(select, null); int current=0; if (c.movetofirst()) { current= integer.parseint(c.getstring(0)); } if(flag==0)//subtraction { current=current-number; } else//addition { current=current+number; } c.close(); db.close(); db = dbhelper.getreadabledatabase(); contentvalues content=new contentvalues(); content.put(name, current); db.update(table_name, content,null,null); } public cursor returndata() { return db.query(table_name, new string[] {name,email}, null, null, null, null, null); } }
edited updatedata()
public void updatedata(integer value,integer flag) { db = dbhelper.getreadabledatabase(); string selectquery = "select balance " + table_name ; cursor cursor = db.rawquery(selectquery, null); int current = 0; if (cursor.movetofirst()) { current= integer.parseint(cursor.getstring(0)); } if(flag==0){ current = current-value; }else { current = current+value ; } cursor.close(); db.close(); try{ db = dbhelper.getwritabledatabase(); string rawquery = "update mytable set balance="+current; db.rawquery(rawquery, null); } catch(exception ex) { ex.printstacktrace(); } }
code worked. db.rawquery(rawquery, null);
changed db.execsql(rawquery);
you can update value in table below method:
public void updateinteger(integer newid) { try{ sqlitedb = appdb.getwritabledatabase(); string rawquery = "update <table_name> set id="+newid; sqlitedb.rawquery(rawquery, null); log.v(tag, "id updated"); } catch(exception ex) { ex.printstacktrace(); } }
Comments
Post a Comment