Android 项目(详解三)—— 数据库类

数据库类

这里写图片描述

各个类的介绍

  • MyDbOpenHelper类:用于创建数据库和数据表
package com.example.myapplication.db;

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;

import com.example.myapplication.AppApplication;

/**
 * Created by 董梦娇 on 2015/10/10.
 */
public class MyDbOpenHelper extends SQLiteOpenHelper {
    /**
     *
     * @param context
     * @param name :传入的是数据表名称
     * @param factory
     * @param version
     */
    public MyDbOpenHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {
        super(context, name, factory, version);
    }
    /**
     * 为方便调用,这里重新写一个构造方法
     */
    public MyDbOpenHelper(){
        this(AppApplication.getApplication(),"SALES.DB",null,1);
    }

    /**
     * 在此方法中创建表
     * @param db
     */
    @Override
    public void onCreate(SQLiteDatabase db) {
        db.execSQL("create table "+TableConfig.TABLE_WORK_DAILY+" if not exists ("+TableConfig.WorkDaily.COLUMN_ID+" integer primary key autoincrement,"+TableConfig.WorkDaily.COLUMN_USE_ID+" integer,"+TableConfig.WorkDaily.COLUMN_TYPE+" integer,"+TableConfig.WorkDaily.COLUMN_CONTENT+" text,"+TableConfig.WorkDaily.COLUMN_TIME+" integer)");

    }

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

    }
}
  • DbManager类:此类中可以创建数据库实例,只是为了方便创建数据库。当然也可以没有,直接利用MyDbOpenHelper类
package com.example.myapplication.db;

import android.database.sqlite.SQLiteDatabase;

/**
 * 此类中可以创建数据库实例,获得对数据库的操作,和MyDbOpenHelper相联系
 */

public class DbManager {
    //使用单例模式,目的是简化数据库的操作
    private MyDbOpenHelper helper;
    private SQLiteDatabase db;
    private DbManager(){
        helper = new MyDbOpenHelper();
        db = helper.getWritableDatabase();

    }
    private static DbManager manager;
    public synchronized static DbManager newInstance(){
        if (manager==null){
            manager=new DbManager();
        }
        return manager;
    }

    public SQLiteDatabase getDb() {
        return db;
    }
}
  • TableOperate类:这是一个操作数据库表的类,进行增删改查操作都在这个类中。
    这里如果要使用xUtils包中的框架,就需要导入xUtils包。
package com.example.myapplication.db;

import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;

import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.List;

/**
 * Created by 董梦娇 on 2015/10/10.
 */
public class TableOperate {

    /**
     * 用于查询表中所有数据,可以用自己写的也可以用xUtils提供的框架。
     * @param tableName:传入的是数据库中的表名
     * @param entityType :传入实体类
     * @param <T>
     * @return
     */
    public <T> List<T> getList(String tableName,Class<T> entityType ){
        SQLiteDatabase db = DbManager.newInstance().getDb();//获得数据库
        Cursor cursor = db.rawQuery("select * from "+tableName,null);//获得cursor
        cursor.moveToFirst();
        ArrayList<T> list = new ArrayList<>();//创建一个list用于存储表中所有数据
        while(!cursor.isAfterLast()){
            try {
                T t = entityType.newInstance(); //通过反射获得Class对象
                for(int i = 0;i<cursor.getColumnCount();i++)
                {
                    String content = cursor.getString(i);//通过cursor指针获得i列的的name
                    String columnname = cursor.getColumnName(i);//通过cursor指针获得i列名称
                    Field field = entityType.getDeclaredField(columnname);//利用反射来通过列名获得属性
                    field.setAccessible(true);
                    field.set(t, content);//将获得的content值添加到t对象中
                    field.setAccessible(false);

                }
                cursor.moveToNext();
                list.add(t); //将t添加到list中。
            } catch (InstantiationException e) {
                e.printStackTrace();
            } catch (IllegalAccessException e) {
                e.printStackTrace();
            } catch (NoSuchFieldException e) {
                e.printStackTrace();
            }
        }

        return list;
        /**
         * 也可以直接使用xUtils中的dbUtils框架
         */
//        List<T> allWork = new ArrayList<>();
//        DbUtils utils = DbUtils.create(AppApplication.getApplication(),tableName);
//        try {
//            allWork = utils.findAll(entityType);
//        } catch (DbException e) {
//            e.printStackTrace();
//        }
//        return allWork;

    }

}
  • WorkDaily类:此类是将数据表写了一个类来方便后面用。类中的属性就是表的每个列属性。
package com.example.myapplication.dao;

/**
 * 这个类是存储数据库中的work_daily表中的字段
 */
public class WorkDaily {
    private String id;
    private String use_id;
    private String type;
    private String content;
    private String time;

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getUse_id() {
        return use_id;
    }

    public void setUse_id(String use_id) {
        this.use_id = use_id;
    }

    public String getType() {
        return type;
    }

    public void setType(String type) {
        this.type = type;
    }

    public String getContent() {
        return content;
    }

    public void setContent(String content) {
        this.content = content;
    }

    public String getTime() {
        return time;
    }

    public void setTime(String time) {
        this.time = time;
    }
}
  • TableConfig类:这个类是个配置类,用于存放表名,表中各种属性,这是为了方便在用表名或者属性时方便并且规范。
package com.example.myapplication.db;


/**
 * Created by 董梦娇 on 2015/10/10.
 */
public class TableConfig {
    public static final String TABLE_WORK_DAILY = "work_daily";//表名work_daily
    static class WorkDaily{//表名为work_daily的表中所有的字段存储在这里
        public static final String COLUMN_ID = "id";
        public static final String COLUMN_USE_ID = "use_id";
        public static final String COLUMN_TYPE = "type";
        public static final String COLUMN_CONTENT = "content";
        public static final String COLUMN_TIME = "time";

    }
}

使用数据库:

这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值