一、SQLite

1、基本概念
SQLite是一个轻量级、独立、隔离、跨平台、多语言接口、安全性高的关系型数据库,主要用于嵌入式设备之上,Android中的数据库就是使用的是SQLite数据库。
2、创建数据库
1)创建类

public class DataBaseHelper extends SQLiteOpenHelper

2)编写DataBaseHelper的构造方法

public DataBaseHelper(Context context){        super(context,DATABASE_NAME,null,1);    }

3)重写SQLiteOpeenHelper的onCreate和onUpgrade方法

    @Override    public void onCreate(SQLiteDatabase db) {        String sql = "create table " + USER_TABLE_NAME +" "+ "(" + USERNAME + " varchar(20) not null," + PASSWORD + " varchar(32) not null," + STATE + " boolean not null)";        db.execSQL(sql);    }    @Override    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {        if (newVersion > oldVersion) {            String sql = "drop table if exists" + USERNAME;            db.execSQL(sql);            this.onCreate(db);        }    }

3、操作数据库
1)在MainActivity中调用已经创建好的数据库

DatabaseHelper databaseHelper = new DatabaseHelper(this);mSqLiteDatabase = databaseHelper.getWritableDatabase();

2)在创建好的数据库中添加数据

private void addData() {        // IO操作,建议后台操作        ContentValues contentValues = new ContentValues();        contentValues.put(DatabaseHelper.USERNAME, "xxxx");        contentValues.put(DatabaseHelper.AGE, "119");        long rowNumber = mSqLiteDatabase.insert(DatabaseHelper.USER_TABLE_NAME, null ,              contentValues);        if(rowNumber != -1){            Toast.makeText(DatabaseButtonActivity.this, "插入成功", Toast.LENGTH_SHORT).show();        }    }

3)删除数据

// delete:String whereClauseString = "username=?";String[] whereArgsString = {"xxxx"};mSqLiteDatabase.delete(DatabaseHelper.USER_TABLE_NAME, whereClauseString, whereArgsString);

4)更新数据

//updateContentValues mContentValues = new ContentValues();mContentValues.put("age","10");whereClauseString = "username=?";sqLiteDatabase.update("user",contentValues,whereClauseString,whereArgsString);

5)对数据的优化

  • 原始SQL语句执行效率更高rawQuery execSQL;
  • 只检索有用的列、有用的行,越少越好;
  • 在数据比较多的时候,需要进行排序;
  • 创建索引,因为当数据很多时需要创建索引,方便查找。
  • 如果一次性要处理很多数据的时候就需要使用事物处理

事物处理的代码如下:

 // 开始事务 此时db会被锁定 mSqLiteDatabase.beginTransaction(); try {    // 做你的操作    for (int i = 0; i < 1000; i++) {        mSqLiteDatabase.execSQL("insert into user(username, age) values ('liu da ming','5岁')");    }   mSqLiteDatabase.setTransactionSuccessful();   // 设置成功} catch (Exception e) {   e.printStackTrace();} finally {   mSqLiteDatabase.endTransaction();}

6)ORM对象关系映射
将一个对象和一个关系型数据进行绑定,这样就不要操作复杂的sql语句,而直接对对象的属性和方法进行操作,对于简单的数据库是个很好的选择。

二、ContentProvider

1、基本的概念

  • 应用程序间共享数据的一种方式
  • 为存储和获取数据提供了统一的接口
  • Android为常见的一些数据提供了默认的ContentProvider
  • Uri,通用资源标识符

2、ContentProvider的接口

 public class TestContentProvider extends ContentProvider {    @Override    public boolean onCreate() {    return false;    }    @Nullable    @Override    public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) {    return null;       }    @Nullable    @Override    public String getType(Uri uri) {    return null;      }    @Nullable    @Override    public Uri insert(Uri uri, ContentValues values) {    return null;      }    @Override    public int delete(Uri uri, String selection, String[] selectionArgs) {    return 0;      }     @Override      public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs) {      return 0;     }    }

3、实例

public class TestContentProvider extends ContentProvider {private  static  UriMatcher sUriMatcher;public  static  final int URI_MATCH_USER = 1;static {    sUriMatcher = new UriMatcher(UriMatcher.NO_MATCH);    sUriMatcher.addURI(URIList.AUTHORITY,DatabaseHelper.USER_TABLE_NAME,URI_MATCH_USER);}private DatabaseHelper mDatabaseHelper;@Overridepublic boolean onCreate() {    mDatabaseHelper = new DatabaseHelper(getContext());    return false;}@Nullable@Overridepublic Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) {    String tablename = getTableName(uri);    if(TextUtils.isEmpty(tablename)){        return  null;    }    Cursor cursor = mDatabaseHelper.getReadableDatabase().query(tablename,projection,selection,selectionArgs,null,null,sortOrder);    return cursor;}@Nullable@Overridepublic String getType(Uri uri) {    return null;}@Nullable@Overridepublic Uri insert(Uri uri, ContentValues values) {    String tablename = getTableName(uri);    if(TextUtils.isEmpty(tablename)){        return  null;    }     long id =   mDatabaseHelper.getWritableDatabase().insert(tablename,null,values);    return ContentUris.withAppendedId(uri,id);}@Overridepublic int delete(Uri uri, String selection, String[] selectionArgs) {    String tablename = getTableName(uri);    if(TextUtils.isEmpty(tablename)){        return  -1;    }    int count =   mDatabaseHelper.getWritableDatabase().delete(tablename,selection,selectionArgs);    return count;}@Overridepublic int update(Uri uri, ContentValues values, String selection, String[] selectionArgs) {    String tablename = getTableName(uri);    if(TextUtils.isEmpty(tablename)){        return  -1;    }    int count =  mDatabaseHelper.getWritableDatabase().update(tablename,values,selection,selectionArgs);    return count;}private String getTableName(Uri uri){    int type = sUriMatcher.match(uri);    String tablename = null;    switch (type){        case URI_MATCH_USER:             tablename = DatabaseHelper.USER_TABLE_NAME;            break;    }    return tablename;    }}

三、总结

这章不是很懂,需要对练习……..

更多相关文章

  1. “罗永浩抖音首秀”销售数据的可视化大屏是怎么做出来的呢?
  2. Nginx系列教程(三)| 一文带你读懂Nginx的负载均衡
  3. 不吹不黑!GitHub 上帮助人们学习编码的 12 个资源,错过血亏...
  4. Android使用Volley获取json数据
  5. Android(安卓)常用 mimeType 表
  6. Android数据缓冲区和数据流的学习总结(BufferedWriter、Buffered
  7. android 短信 彩信 数据库
  8. Android(安卓)客户端Socket 实现及简单封装。
  9. 照片上传图片旋转(ios和android)

随机推荐

  1. Android(安卓)UI设计——ListView控件与S
  2. Android键盘使用问题汇总
  3. Android(安卓)学习笔记(一)
  4. android应用安全——数据安全
  5. opengl
  6. Android(安卓)JNI原理分析
  7. 初探Android
  8. 【Android(安卓)界面效果19】Android中sh
  9. 编写自定义的 Android(安卓)Preference
  10. 使用Android(安卓)SwipeRefreshLayout了