加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

SQLite数据库实用的封装

发布时间:2020-12-12 23:44:24 所属栏目:百科 来源:网络整理
导读:SQLite数据库简单封装: 每一张表 都会对应一个Bean 和一个Dao类 SqliteHelper 主要负责创建数据库和更新数据库 主要为其提供 创建表的sql语句 数据库名称 和数据库版本号 SqliteHelper类 public class SqliteHelper extends SQLiteOpenHelper { private stat

SQLite数据库简单封装:
每一张表 都会对应一个Bean 和一个Dao类
SqliteHelper 主要负责创建数据库和更新数据库 主要为其提供 创建表的sql语句 数据库名称 和数据库版本号

  1. SqliteHelper类
public class SqliteHelper extends SQLiteOpenHelper {
    private static String DB_NAME="gac.db";
    private static int VERSION = 1;
    private static final String USER_TABLE_CREATE="create table if not exists "
            +UserDao.TABLE_NAME +" ("
            +UserDao.COLUMN_ID +" INTEGER PRIMARY KEY AUTOINCREMENT,"
            +UserDao.COLUMN_NAME+" TEXT)";
    private Context context;
    private static SqliteHelper instance;
    public static SqliteHelper getInstance(Context context){
        if(instance == null){
            instance = new SqliteHelper(context.getApplicationContext());
        }
        return instance;
    }
    public SqliteHelper(Context context){
        super(context,DB_NAME,null,VERSION);
        this.context = context;
    }
    public Context getContext(){
        return context;
    }
   @Override
    public void onCreate(SQLiteDatabase db) {
        db.execSQL(USER_TABLE_CREATE);
    }

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

    }
    public void closeDB(){
        if(instance != null){
            try{
                SQLiteDatabase db = instance.getWritableDatabase();
                db.close();
            }catch (Exception e){
                e.printStackTrace();
            }
            instance = null;

        }
    }
}
  1. bean类主要负责 对应表 成员变量最好和表的字段名对应
public class UserBean {
    public String name;
   public int id;
    public UserBean(){

    }
    public UserBean(String name){
        this.name = name;
    }
    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getId() {
        return id;
    }

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

4.dao类主要负责操作对应的表的增删该查 以及存储表的字段名 和表的名称 添加的数据可以利用反射进行操作

public class UserDao { public static String TABLE_NAME = "user"; public static String COLUMN_ID = "id"; public static String COLUMN_NAME = "name"; private SqliteHelper helper = null; public UserDao(Context context){ helper = new SqliteHelper(context); } //根据cursor获取userbean private UserBean getUserBeanByCursor(Cursor cursor){ UserBean user = new UserBean(); Class< ? extends UserBean> clazz = user.getClass(); Field[] fields = clazz.getDeclaredFields(); for(Field field :fields){ if(field.getName().equals("id")){ user.id = cursor.getInt(cursor.getColumnIndex("id")); continue; } if(field.getName().equals("name")){ user.name = cursor.getString(cursor.getColumnIndex("name")); continue; } } return user; } //根据user获取contentvalues private ContentValues getContentValues(UserBean user){ ContentValues values = new ContentValues(); Class<? extends UserBean> clazz = user.getClass(); try{ Method[] methods = clazz.getMethods(); Object[] args = null; for(Method method : methods) { String mName = method.getName(); if (mName.startsWith("get") && !mName.startsWith("getClass")) { String filedName = mName.substring(3,mName.length()).toLowerCase(); Log.e("gac","fieldName:"+filedName); if(filedName.equals("id")){ //id 让它自动增加 continue; } Object value = method.invoke(user,args); if (value instanceof String) { values.put(filedName,(String) value); } else if (value instanceof Integer) { values.put(filedName,(Integer) value); } } } }catch (Exception e){e.printStackTrace();} return values; } //添加用户 public boolean addUser(UserBean user){ boolean flag = false; SQLiteDatabase database = null; long id = -1; try{ database = helper.getWritableDatabase(); ContentValues values = getContentValues(user); Class<? extends UserBean> calzz = user.getClass(); String tableName = TABLE_NAME; id = database.insert(tableName,null,values); flag = (id !=-1?true:false); if(database != null){ database.close(); } }catch (Exception e){ e.printStackTrace(); } Log.e("gac","addUser flag:"+flag); return flag; } //删除用户 public boolean delteUser(String id,String name){ boolean flag = false; String wereClause = "id = ? and name = ?"; String [] whereArgs = new String[]{id,name}; SQLiteDatabase db = helper.getWritableDatabase(); try{ int res = db.delete(TABLE_NAME,wereClause,whereArgs); flag = (res != 0?true:false); if(db != null){ db.close(); } }catch (Exception e){ e.printStackTrace(); } return flag; } //更新数据库 public boolean updateUser(String whereClause,String[] whereArgs,UserBean user){ // String wereClause = "id = ? and name = ?"; // String [] whereArgs = new String[]{id,name}; boolean flag = false; SQLiteDatabase db = helper.getWritableDatabase(); try{ ContentValues values = getContentValues(user); int res = db.update(TABLE_NAME,values,whereClause,whereArgs); flag = (res <= 0?false:true); db.close(); }catch (Exception e){e.printStackTrace();} Log.e("gac","updateUser:"+flag); return flag; } //查询 public List<UserBean> getUserList(String sql,String[] whereArgs){ SQLiteDatabase db = helper.getWritableDatabase(); Cursor cursor = db.rawQuery(sql,whereArgs); List<UserBean> mList = null; if(cursor != null){ mList = new ArrayList<>(); while (cursor.moveToNext()){ mList.add(getUserBeanByCursor(cursor)); } } return mList; } }
  1. //测试例子
//new UserDao(this).addUser(new UserBean("gac"));
       // new UserDao(this).updateUser("id = ?",new String[]{1+""},new UserBean("gac1"));
        List<UserBean> list = new UserDao(this).getUserList("select * from " + UserDao.TABLE_NAME,null);
        for(int i =0; i < list.size(); i++){
            Log.e("gac",list.get(i).getName());
            Log.e("gac",list.get(i).getId()+"");
        }

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读