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
- Android多媒体数据库详解
- android 多媒体数据库详解
- android 多媒体数据库详解
- android 多媒体数据库详解
- SQLite Android数据库详解
- android 多媒体数据库详解
- Android数据库SQlite详解
- android 数据库详解
- Android ORMLite数据库详解
- Android 数据库详解
- android数据库事务操作详解
- Android 使用SQLite数据库详解
- android sqlite 数据库使用 详解
- android短信数据库字段详解
- Android-SQLite数据库操作详解
- Android SQLite 数据库的详解
- Android SQLite3数据库操作详解
- android sqllite数据库使用详解
- Kruskal算法模板 HDU 1233
- CSS层叠样式表
- Android嵌套布局初步(一)
- ubuntu下安装、启动和卸载SSH
- 安卓应用修改系统时间
- android 数据库详解
- lightoj 1010 - Knights in Chessboard(找规律)
- 坚持#第49天~李半仙音乐盒完成啦
- 度量学习
- 数据库分片(Sharding)与分区(Partition)的区别
- USB摄像头预览识别二维码
- MATLAB多分类,使用libsvm和linear的详解和区别
- hihocoder 1385 A Simple Job 模拟
- Xcode8---ios9.2一下崩溃问题