android 数据库详解

在android中一般使用SQLite,SQLite是一种轻量级数据库,其有独立性、跨平台、安全性特征,是一种实现了自给自足的、无服务器的、零配置的、事务性的 SQL 数据库引擎。SQLite 引擎不是一个独立的进程,可以按应用程序需求进行静态或动态连接。SQLite 直接访问其存储文件。

SQLite俩种实现方式:

1.使用xUtils框架
首先要导入xutils jar包,配置下相应权限。

基础描述

需要的权限
<uses-permissionAndroid:name="android.permission.INTERNET"/>
    <uses-permissionandroid:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

创建数据库
  DaoConfig config = new DaoConfig(context);
  config.setDbName("xUtils-demo"); //db名
  config.setDbVersion(1);  //db版本
  DbUtils db = DbUtils.create(config);//db还有其他的一些构造方法,比如含有更新表版本的监听器的

创建表
  db.createTableIfNotExist(User.class); //创建一个表User
    db.save(user);//在表中保存一个user对象。最初执行保存动作时,也会创建User表

删除表
  db.dropTable(User.class); 

开启事务
  db.configAllowTransaction(true);

public class SQLiteHelper {

private DbUtils mDB = null;
//代码中所用key在实际开发中,根据自己需求逻辑调整
private synchronized void _init() {
    mDB = DbUtils.create(context, path, name);//创建数据库
    mDB.configAllowTransaction(true);
    Key key = new Key(); //Key对象必须有id属性,或者有通过@ID注解的属性
    key.setId("1");
    key.setName("xxx");
    try {
        mDB.save(key);// mDB.saveBindingId(key);使用saveBindingId保存实体时会为实体的id赋值
    } catch (DbException e) {
        e.printStackTrace();
    }

}
//更新数据库
public void updateKeys(List<Key> keys) {
    ArrayList<String> keyIds = new ArrayList<>();
    if (keys == null) {
        keys = new ArrayList<>();
    }
    for (Key key : keys) {
        WhereBuilder builder = WhereBuilder.b().and("keyId", "==", key.getId());
        long count = 0;
        try {
            Selector selector = Selector.from(Key.class).where(builder);
            if (mDB != null) {
                count = mDB.count(selector);
            }
        } catch (DbException e) {
            e.printStackTrace();
        }

        if (count == 0) {
            addKey(key);
        } else {
            try {
                mDB.update(key, builder, "name", "type");
            } catch (DbException e) {
                e.printStackTrace();
            }
        }

        keyIds.add(key.getId());
    }
}

//更新key信息
public void updateKey(Key key) {
    try {
        mDB.saveOrUpdate(key);
    } catch (DbException e) {
        e.printStackTrace();
    }
}

//新增key
public synchronized void addKey(Key key) {
    try {
        mDB.saveBindingId(key);
    } catch (DbException e) {
        e.printStackTrace();
    }

}

//删除
public synchronized void deleteKey(String id) {
    WhereBuilder builder = WhereBuilder.b().and("id", "==", id);
    try {
        mDB.delete(Key.class, builder);
    } catch (DbException e) {
        e.printStackTrace();
    }
}

}

2.继承SQLiteOpenHelper
public class SQLiteHelper extends SQLiteOpenHelper {

private final static String USER_ID = "user_id";
private final static String USER_NAME = "user_name";
private final static String TABLE_NAME = "table_name";

public SQLiteHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {
    super(context, name, factory, version);
}

//创建数据库,在此做初始化操作
@Override
public void onCreate(SQLiteDatabase db) {
    db.execSQL("create table if not exists" +TABLE_NAME+"("
            + "id integer primary key,"
            + USER_NAME+" varchar,"
            + "level integer)");
}

//当打开数据库时传入的版本号与当前的版本号不同时会调用该方法
@Override
public void onUpgrade(SQLiteDatabase db, int i, int i1) {
    String sql="DROP TABLE IF EXISTS "+TABLE_NAME;
    db.execSQL(sql);
    onCreate(db);
}

//查询条件
public Cursor select() {
    SQLiteDatabase db=this.getReadableDatabase();
    Cursor cursor=db.query(TABLE_NAME,null,null,null,null,null,"_id desc");
    return cursor;
}


//增加条件,返回插入行的id,错误返回-1
public long insert(String name) {
    SQLiteDatabase db=this.getWritableDatabase();
    ContentValues cv=new ContentValues();
    cv.put(USER_NAME, name);
    long row=db.insert(TABLE_NAME, null, cv);
    return row;
}


//状态返回,若传入正确的where语句 则被删除的行数将被返回 若传入null 返回0 若要删除所有行并返回删除的行数 则需要在where语句的地方传入字符串
//删除条件,whereValue取代where中的?占位符
public void delete(int id){
    SQLiteDatabase db=this.getWritableDatabase();
    String where=USER_ID+"=?";
    String[] whereValue={Integer.toString(id)};
    db.delete(TABLE_NAME, where, whereValue);
}

//更新数据库
public void update(int id,String name){
    SQLiteDatabase db=this.getWritableDatabase();
    String where=USER_NAME+"=?";
    String[] whereValue={Integer.toString(id)};
    ContentValues cv=new ContentValues();
    cv.put(USER_NAME, name);
    db.update(TABLE_NAME, cv, where, whereValue);
}

}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值