android - multiple table sqlite database -
i new sqlite database , want make 2 tables:
1) my_folders( folder_id integer primary key autoincrement, folder_tite text not null currency text folder_descrip text folder_pic text ); 2) table my_expenses( log_id integer primary key autoincrement, e_folder_id integer name text not null, amount integer date numeric not null time numeric not null notes text foreign key(e_folder_id) references my_folders(folder_id) );
my question how implement 2nd table? can directly add codes create 2nd table "my_expenses" in same dbadapter file? or should seperate tables in different files in https://stackoverflow.com/a/5899110/1398267? if that's case, codes required insert new record in table my_folders , my_expenses?
i created 1 table , can add new record table through piece of codes:
button b1 = (button) findviewbyid(r.id.bnext); b1.setonclicklistener(new onclicklistener() { public void onclick(view v) { db.open(); db.insertfolder(getfoldertitle.gettext().tostring(), getcurrency.getselecteditem().tostring(), getfolderdescription.gettext().tostring()); db.close(); } }
here database codes:
public class dbadapter { public static final string key_rowid = "_id"; public static final string key_name = "name"; public static final string key_currency = "currency"; public static final string key_notes = "notes"; private static final string tag = "dbadapter"; private static final string database_name = "mydb"; private static final string database_table = "my_folders"; private static final int database_version = 1; private static final string database_create = "create table my_folders (_id integer primary key autoincrement, " + "name text not null, currency text not null, notes text not null);"; private final context context; private databasehelper dbhelper; private sqlitedatabase db; public dbadapter(context ctx) { this.context = ctx; dbhelper = new databasehelper(context); } private static class databasehelper extends sqliteopenhelper { databasehelper(context context) { super(context, database_name, null, database_version); } @override public void oncreate(sqlitedatabase db) { try { db.execsql(database_create); } catch (sqlexception e) { e.printstacktrace(); } } @override public void onupgrade(sqlitedatabase db, int oldversion, int newversion) { log.w(tag, "upgrading database version " + oldversion + " " + newversion + ", destroy old data"); db.execsql("drop table if exists my_folders"); oncreate(db); } } // ---opens database--- public dbadapter open() throws sqlexception { db = dbhelper.getwritabledatabase(); return this; } // ---closes database--- public void close() { dbhelper.close(); } // ---insert folder database--- public long insertfolder(string name, string currency, string notes) { contentvalues initialvalues = new contentvalues(); initialvalues.put(key_name, name); initialvalues.put(key_currency, currency); initialvalues.put(key_notes, notes); return db.insert(database_table, null, initialvalues); } // ---deletes particular folder--- public boolean deletefolder(long rowid) { return db.delete(database_table, key_rowid + "=" + rowid, null) > 0; } // ---deletes folders--- public boolean deleteall() { return db.delete(database_table, "1", null) > 0; } // ---retrieves folders--- public cursor getallfolders() { return db.query(database_table, new string[] {key_rowid, key_name, key_currency, key_notes}, null, null, null, null, null); } // ---retrieves particular folder--- public cursor getfolder(long rowid) throws sqlexception { cursor mcursor = db.query(true, database_table, new string[] { key_rowid, key_name, key_currency, key_notes }, key_rowid + "=" + rowid, null, null, null, null, null); if (mcursor != null) { mcursor.movetofirst(); } return mcursor; } // ---updates folder--- public boolean updatefolder(long rowid, string name, string currency, string notes) { contentvalues args = new contentvalues(); args.put(key_name, name); args.put(key_currency, currency); args.put(key_notes, notes); return db.update(database_table, args, key_rowid + "=" + rowid, null) > 0; } }
you have execute more queries in oncreate method:
@override public void oncreate(sqlitedatabase db) { db.execsql(create_dbinfo); //create table db_info as... db.execsql(create_type); //create table ... db.execsql(create_tag); //create table ... constant strings! db.execsql(create_category); db.execsql(create_resource); db.execsql(create_restag); db.execsql(create_rescat); db.execsql(create_typecat); db.execsql("insert dbinfo values(-1,0)"); db.execsql("insert tag values(1,'no tag',0)"); }
this short example project did time ago. constants create table query defined (exactly did first table).
just write new creation queries , you're go.
Comments
Post a Comment