android 数据库详解

来源:互联网 发布:密码生成器软件 编辑:程序博客网 时间:2024/06/06 06:39

在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();    }}//新增keypublic 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);}//创建数据库,在此做初始化操作@Overridepublic void onCreate(SQLiteDatabase db) {    db.execSQL("create table if not exists" +TABLE_NAME+"("            + "id integer primary key,"            + USER_NAME+" varchar,"            + "level integer)");}//当打开数据库时传入的版本号与当前的版本号不同时会调用该方法@Overridepublic 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,错误返回-1public 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
原创粉丝点击