Android Sqlite 多表联动

来源:互联网 发布:粤贵银分析软件 编辑:程序博客网 时间:2024/06/04 17:59

sqlite android开发中用的很多 本地库存储数据 关键怎么用看你的需求 现在就简单说一下 sqlite Api 操作
第一步 SQLiteOpenHelper 字面sqlite 助手
写一个类 继承SQLiteOpenHelper 并实现三个方法

public class SqliteHelper extends SQLiteOpenHelper{
// 构造
public SqliteHelper(Context context){
// 此处调用四参
super(context, SqliteData.DATABASENAME, null, SqliteData.DBVERSION);

}// 四参构造public SqliteHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {    super(context, name, factory, version);}

// 创建库/表时调用
@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);
}
// 升级更新数据库版本时调用
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

}

// 打开数据库是调用
@Override
public void onOpen(SQLiteDatabase db) {
super.onOpen(db);
}
}

// 第二步 给出一个单例管理SQLiteOpenHelper 对象 让他不会被重复创建
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”;

}

// 第四步 创建一个类 管理数据库操作方法(此处省略 看个人喜好)
// 第五步 联动分析 我是根据字段来进行关联的 把这个不同字段分为不同类型进行判断操作 例如 需求 :一个动物园有很多动物 有cat dog 我要管理这些动物 进行分类梳理 首先我创建一个animal 库(动物园) 一个cat库 (cat)一个dog 库(dog) 他们有一个相同的字段animalId 一个分类字段animalclass 进行判断 跟谁关联 如果是cat 就添加进cat 库 反之 添加进dog库 查询时再根据animalId 查询 因为三个表的animalId 是相同的

第六步 建表 添加数据
a 准备数据
数据类
public class AnimalBeans {
private String name;// 名字
private String age;// 年龄
private String time;//时间
private String id;// id
private String animalclass; //分类
private int weight; //分类
}
// 添加两条数据
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();
//插入数据
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);
}
到此时 执行以下 就添加了两条数据
现在查询看一下
第七步 查询数据
做一个简单布局
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数据 并取出相对应的cat dog 库中的数据 catbt 查询cat库 dogbt 查询dog库 listview 展示查询结果
数据集合
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 tableprivate 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("猫")){// 根据判断 查询对应的表            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 tableprivate 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)){// 判断添加对应的集合            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 用于展示查询结果
private void addAdapter(List dogs) {
b = new Adapter(MainActivity.this,dogs);
listAnimals.setAdapter(b);
b.notifyDataSetChanged();
}
到此时 就结束了
效果图

animalbt
这里写图片描述

gif
这里写图片描述

http://download.csdn.net/download/naide_s/9989053(demo下载链接)

原创粉丝点击