Android Sqlite 数据库多表联动操作 含demo

2018-07-12  本文已影响0人  nade_s

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 

图例01 图例02

demo下载

上一篇 下一篇

猜你喜欢

热点阅读