Android Sqlite 多表联动

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 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("猫")){// 根据判断 查询对应的表
            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)){// 判断添加对应的集合
            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下载链接)

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值