Android Sqlite 數(shù)據(jù)庫多表聯(lián)動操作 含demo

sqlite android開發(fā)中用的很多 本地庫存儲數(shù)據(jù) 關(guān)鍵怎么用看你的需求 現(xiàn)在就簡單說一下 sqlite Api 操作?

第一步 SQLiteOpenHelper 字面sqlite 助手?

寫一個類 繼承SQLiteOpenHelper 并實現(xiàn)三個方法

public class SqliteHelper extends SQLiteOpenHelper{?

// 構(gòu)造?

public SqliteHelper(Context context){?

// 此處調(diào)用四參?

super(context, SqliteData.DATABASENAME, null, SqliteData.DBVERSION);}

// 四參構(gòu)造

public SqliteHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {

? ? super(context, name, factory, version);

}

// 創(chuàng)建庫/表時調(diào)用?

@Override?

public void onCreate(SQLiteDatabase db) {?

String sqlAnimal = “create table IF NOT EXISTS animal(_id integer primary key autoincrement ,animalid varchar(255) ,name varchar(255) ,animalclass varchar(255) ,age varchar(255));”;?

db.execSQL(sqlAnimal);?

String sqlDog = “create table IF NOT EXISTS dog(_id integer primary key autoincrement ,animalid varchar(255) ,time varchar(255) ,dogname varchar(255) ,dogage varchar(255) ,weight integer);”;?

db.execSQL(sqlDog);?

String sqlCat = “create table IF NOT EXISTS cat(_id integer primary key autoincrement ,animalid varchar(255) ,time varchar(255) ,catname varchar(255) ,catage varchar(255) ,weight integer);”;?

db.execSQL(sqlCat);?

}?

// 升級更新數(shù)據(jù)庫版本時調(diào)用?

@Override?

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

}

/ 打開數(shù)據(jù)庫是調(diào)用?

@Override?

public void onOpen(SQLiteDatabase db) {?

super.onOpen(db);?

}?

}

// 第二步 給出一個單例管理SQLiteOpenHelper 對象 讓他不會被重復(fù)創(chuàng)建?

public class SqManager {?

public static SqliteHelper helper;?

public static SqliteHelper getInstance(Context context){?

// 為null 就new 一個 不為null 就直接使用?

if (helper==null){?

helper = new SqliteHelper(context);?

}?

return helper;?

}

}

// 給一個字段管理類 進行字段管理(看個人喜好)?

public class SqliteData {?

public static final String DATABASENAME = “test”;?

public static final String TABLEBNAME = “name”;?

public static final int DBVERSION = 1;?

/**動物表?

* String sqlAnimal = “create table IF NOT EXISTS animal?

* (_id integer primary key autoincrement ,animalid varchar(255)?

* ,name varchar(255) ,animalclass varchar(255) ,age varchar(255));”;?

狗表?

String sqlDog = “create table IF NOT EXISTS dog?

(_id integer primary key autoincrement ,animalid varchar(255)?

,time varchar(255) ,dogname varchar(255) ,dogage varchar(255) ,weight integer);”;?

貓表?

String sqlCat = “create table IF NOT EXISTS cat?

(_id integer primary key autoincrement ,animalid varchar(255)?

,time varchar(255) ,catname varchar(255) ,catage varchar(255) ,weight integer);”;?

*/?

public static final String NAME = “name”;?

public static final String ANIMALCLASS = “animalclass”;?

public static final String AGE = “age”;?

public static final String ANIMALID = “animalid”;?

public static final String TIME = “time”;?

public static final String DOFNAME = “dogname”;?

public static final String DOGAGE = “dogage”;?

public static final String WEIGHT = “weight”;?

public static final String CATNAME = “catname”;?

public static final String CATAGE = “catage”;

}

// 第四步 創(chuàng)建一個類 管理數(shù)據(jù)庫操作方法(此處省略 看個人喜好)?

// 第五步 聯(lián)動分析 我是根據(jù)字段來進行關(guān)聯(lián)的 把這個不同字段分為不同類型進行判斷操作 例如 需求 :一個動物園有很多動物 有cat dog 我要管理這些動物 進行分類梳理 首先我創(chuàng)建一個animal 庫(動物園) 一個cat庫 (cat)一個dog 庫(dog) 他們有一個相同的字段animalId 一個分類字段animalclass 進行判斷 跟誰關(guān)聯(lián) 如果是cat 就添加進cat 庫 反之 添加進dog庫 查詢時再根據(jù)animalId 查詢 因為三個表的animalId 是相同的

第六步 建表 添加數(shù)據(jù)?

a 準備數(shù)據(jù)?

數(shù)據(jù)類?

public class AnimalBeans {?

private String name;// 名字?

private String age;// 年齡?

private String time;//時間?

private String id;// id?

private String animalclass; //分類?

private int weight; //分類?

}?

// 添加兩條數(shù)據(jù)?

private void setData() {?

AnimalBeans beans = new AnimalBeans();?

beans.setAge(“1”);?

beans.setAnimalclass(“狗”);?

beans.setName(“阿水”);?

beans.setId(“1”);?

beans.setWeight(11);?

beans.setTime(“2017年9月21日”);?

animals.add(beans);?

AnimalBeans beans1 = new AnimalBeans();?

beans1.setTime(“2017年8月20號”);?

beans1.setWeight(5);?

beans1.setId(“2”);?

beans1.setName(“mm”);?

beans1.setAnimalclass(“貓”);?

beans1.setAge(“0.8”);?

animals.add(beans1);?

}?

通過單利得到 助手對象 進行建表?

helper = SqManager.getInstance(this);?

SQLiteDatabase db = helper.getWritableDatabase();?

//插入數(shù)據(jù)?

ContentValues values = new ContentValues();?

for (int i = 0; i < animals.size(); i++) {?

values.put(SqliteData.NAME,animals.get(i).getName());?

values.put(SqliteData.ANIMALID,animals.get(i).getId());?

values.put(SqliteData.ANIMALCLASS,animals.get(i).getAnimalclass());?

values.put(SqliteData.AGE,animals.get(i).getAge());?

db.insert(“animal”,null,values);?

if (animals.get(i).getAnimalclass().equals(“貓”)){// 此處判斷添加哪個庫?

inSertCat(i,db);?

}else {?

inSertDog(i,db);?

}?

}?

db.close();?

// 插入 cat table?

private void inSertCat(int i, SQLiteDatabase db) {?

ContentValues valuesDog = new ContentValues();?

valuesDog.put(SqliteData.ANIMALID,animals.get(i).getId());?

valuesDog.put(SqliteData.TIME,animals.get(i).getTime());?

valuesDog.put(SqliteData.CATNAME,animals.get(i).getName());?

valuesDog.put(SqliteData.CATAGE,animals.get(i).getAge());?

valuesDog.put(SqliteData.WEIGHT,animals.get(i).getWeight());?

db.insert(“cat”,null,valuesDog);?

}?

// 插入 dog table?

private void inSertDog(int i, SQLiteDatabase db) {?

ContentValues valuesDog = new ContentValues();?

valuesDog.put(SqliteData.ANIMALID,animals.get(i).getId());?

valuesDog.put(SqliteData.TIME,animals.get(i).getTime());?

valuesDog.put(SqliteData.DOFNAME,animals.get(i).getName());?

valuesDog.put(SqliteData.DOGAGE,animals.get(i).getAge());?

valuesDog.put(SqliteData.WEIGHT,animals.get(i).getWeight());?

db.insert(“dog”,null,valuesDog);?

}?

到此時 執(zhí)行以下 就添加了兩條數(shù)據(jù)?

現(xiàn)在查詢看一下?

第七步 查詢數(shù)據(jù)?

做一個簡單布局?

Button?

android:layout_width=”match_parent”?

android:layout_height=”wrap_content”?

android:text=”查詢”?

android:id=”@+id/animal_bt”/>?

Button?

android:layout_width=”match_parent”?

android:layout_height=”wrap_content”?

android:text=”貓”?

android:id=”@+id/cat_bt”/>?

Button?

android:layout_width=”match_parent”?

android:layout_height=”wrap_content”?

android:text=”狗”?

android:id=”@+id/dog_bt”/>?

ListView?

android:layout_width=”match_parent”?

android:layout_height=”wrap_content”?

android:id=”@+id/animal_list”?

android:scrollbars=”none”>/ListView>?

三個按鈕 animalbt 查詢animal數(shù)據(jù) 并取出相對應(yīng)的cat dog 庫中的數(shù)據(jù) catbt 查詢cat庫 dogbt 查詢dog庫 listview 展示查詢結(jié)果?

數(shù)據(jù)集合?

List animalss = new ArrayList();?

List dogs = new ArrayList();?

List cats = new ArrayList();?

@Override?

public void onClick(View v) {?

switch (v.getId()){?

case R.id.animal_bt:?

queryAnimal();?

addAdapter(animalss);// 添加listview的adapter?

break;?

case R.id.cat_bt:?

queryCat(“”);//?

addAdapter(cats);?

break;?

case R.id.dog_bt:?

queryDog(“”);?

addAdapter(dogs);

break;

? ? }

}

? // 查詢 animal table

private void queryAnimal() {

? ? SQLiteDatabase dbAnimal = helper.getWritableDatabase();

? ? Cursor animal = dbAnimal.query("animal", null, null, null, null, null, null);

? ? while (animal.moveToNext()){

? ? ? ? String id = animal.getString(animal.getColumnIndex(SqliteData.ANIMALID));

? ? ? ? String name = animal.getString(animal.getColumnIndex(SqliteData.NAME));

? ? ? ? String classify = animal.getString(animal.getColumnIndex(SqliteData.ANIMALCLASS));

? ? ? ? String age = animal.getString(animal.getColumnIndex(SqliteData.AGE));

? ? ? ? if (classify.equals("貓")){// 根據(jù)判斷 查詢對應(yīng)的表

? ? ? ? ? ? queryCat(id);

? ? ? ? }else {

? ? ? ? ? ? queryDog(id);

? ? ? ? }

? ? }

? ? dbAnimal.close();

}? ?

// 查詢dog table?

private void queryDog(String i) {?

AnimalBeans beans = new AnimalBeans();;?

SQLiteDatabase dbDog = helper.getWritableDatabase();

? ? Cursor dog = dbDog.query("dog", null, null, null, null, null, null);

? ? while (dog.moveToNext()){

? ? ? ? int keyId = dog.getInt(dog.getColumnIndex("_id"));

? ? ? ? String id = dog.getString(dog.getColumnIndex(SqliteData.ANIMALID));

? ? ? ? String time = dog.getString(dog.getColumnIndex(SqliteData.TIME));

? ? ? ? String name = dog.getString(dog.getColumnIndex(SqliteData.DOFNAME));

? ? ? ? String age = dog.getString(dog.getColumnIndex(SqliteData.DOGAGE));

? ? ? ? int weight = dog.getInt(dog.getColumnIndex(SqliteData.WEIGHT));

? ? ? if (!TextUtils.isEmpty(i)&&i.equals(id)){

? ? ? ? ? beans.setAge(age);

? ? ? ? ? beans.setName(name);

? ? ? ? ? beans.setWeight(weight);

? ? ? ? ? beans.setAnimalclass("狗");

? ? ? ? ? beans.setId(keyId+"");

? ? ? ? ? animalss.add(beans);

? ? ? }

? ? ? ? beans.setAge(age);

? ? ? ? beans.setName(name);

? ? ? ? beans.setWeight(weight);

? ? ? ? beans.setAnimalclass("狗");

? ? ? ? beans.setId(keyId+"");

? ? ? ? dogs.add(beans);

? ? }

? ? dbDog.close();

}

// 查詢cat table

private void queryCat(String i) {

? ? AnimalBeans beans = new AnimalBeans();

? ? SQLiteDatabase dbCat = helper.getWritableDatabase();

? ? Cursor cat = dbCat.query("cat", null, null, null, null, null, null);

? ? while (cat.moveToNext()){

? ? ? ? int keyid = cat.getInt(cat.getColumnIndex("_id"));

? ? ? ? String id = cat.getString(cat.getColumnIndex(SqliteData.ANIMALID));

? ? ? ? String time = cat.getString(cat.getColumnIndex(SqliteData.TIME));

? ? ? ? String name = cat.getString(cat.getColumnIndex(SqliteData.CATNAME));

? ? ? ? String age = cat.getString(cat.getColumnIndex(SqliteData.CATAGE));

? ? ? ? int weight = cat.getInt(cat.getColumnIndex(SqliteData.WEIGHT));

? ? ? ? if (!TextUtils.isEmpty(i)&&i.equals(id)){// 判斷添加對應(yīng)的集合

? ? ? ? ? ? beans.setName(name);

? ? ? ? ? ? beans.setAge(age);

? ? ? ? ? ? beans.setWeight(weight);

? ? ? ? ? ? beans.setAnimalclass("貓");

? ? ? ? ? ? beans.setId(keyid+"");

? ? ? ? ? ? animalss.add(beans);

? ? ? ? }

? ? ? ? beans.setName(name);

? ? ? ? beans.setAge(age);

? ? ? ? beans.setWeight(weight);

? ? ? ? beans.setAnimalclass("貓");

? ? ? ? beans.setId(keyid+"");

? ? ? ? cats.add(beans);

? ? }

? ? dbCat.close();

}

// 給listview 添加adapter 用于展示查詢結(jié)果?

private void addAdapter(List dogs) {?

b = new Adapter(MainActivity.this,dogs);?

listAnimals.setAdapter(b);?

b.notifyDataSetChanged();?

}?

到此時 就結(jié)束了?

效果圖

animalbt?


圖例01


圖例02


demo下載

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子高每,更是在濱河造成了極大的恐慌雹洗,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,640評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機填渠,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,254評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來鸟辅,“玉大人氛什,你說我怎么就攤上這事》肆梗” “怎么了枪眉?”我有些...
    開封第一講書人閱讀 165,011評論 0 355
  • 文/不壞的土叔 我叫張陵,是天一觀的道長再层。 經(jīng)常有香客問我贸铜,道長堡纬,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,755評論 1 294
  • 正文 為了忘掉前任蒿秦,我火速辦了婚禮烤镐,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘棍鳖。我一直安慰自己职车,他們只是感情好,可當我...
    茶點故事閱讀 67,774評論 6 392
  • 文/花漫 我一把揭開白布鹊杖。 她就那樣靜靜地躺著,像睡著了一般扛芽。 火紅的嫁衣襯著肌膚如雪骂蓖。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,610評論 1 305
  • 那天川尖,我揣著相機與錄音登下,去河邊找鬼。 笑死叮喳,一個胖子當著我的面吹牛被芳,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播馍悟,決...
    沈念sama閱讀 40,352評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼畔濒,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了锣咒?” 一聲冷哼從身側(cè)響起侵状,我...
    開封第一講書人閱讀 39,257評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎毅整,沒想到半個月后趣兄,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,717評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡悼嫉,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,894評論 3 336
  • 正文 我和宋清朗相戀三年艇潭,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片戏蔑。...
    茶點故事閱讀 40,021評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡蹋凝,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出辛臊,到底是詐尸還是另有隱情仙粱,我是刑警寧澤,帶...
    沈念sama閱讀 35,735評論 5 346
  • 正文 年R本政府宣布彻舰,位于F島的核電站伐割,受9級特大地震影響候味,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜隔心,卻給世界環(huán)境...
    茶點故事閱讀 41,354評論 3 330
  • 文/蒙蒙 一白群、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧硬霍,春花似錦帜慢、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,936評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至拜轨,卻和暖如春抽减,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背橄碾。 一陣腳步聲響...
    開封第一講書人閱讀 33,054評論 1 270
  • 我被黑心中介騙來泰國打工卵沉, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人法牲。 一個月前我還...
    沈念sama閱讀 48,224評論 3 371
  • 正文 我出身青樓史汗,卻偏偏與公主長得像,于是被迫代替她去往敵國和親拒垃。 傳聞我的和親對象是個殘疾皇子停撞,可洞房花燭夜當晚...
    茶點故事閱讀 44,974評論 2 355

推薦閱讀更多精彩內(nèi)容