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?