看资料不是说SQLiteDatabase可以对数据进行操作嘛,怎么ContentProvider这个也可以,ContentResolver却又可以对ContentProvider的数据进行操作,好乱啊,完全没有思路,谁能给解释下,还有,好像都能实现增删改查

解决方案 »

  1.   

    数据存取有三种方式:
    1. contentprovider
    2. database
    3. preferrence其中:
    1. contentprovider是一个接口,可以与其他程序共享数据。其中数据访问部分可以采用访问database, preferrence, 或者存取自定义文件的方式来实现。 ContentResolver可以获取到对应的contentprovider,来控制数据。
    2. database直接操作数据库,只限于当前程序。
    3. preferrence操作xml文件,限于当前程序。
      

  2.   

    什么是SQLiteDatabase? 
    一个SQLiteDatabase的实例代表了一个SQLite的数据库,通过SQLiteDatabase实例的一些方法,我们可以执行SQL语句,对数据库进行增、删、查、改的操作。需要注意的是,数据库对于一个应用来说是私有的,并且在一个应用当中,数据库的名字也是惟一的。
    Content Provider:
    一般是通过ContentResolver。你可以通过getContentResolver()从一个活动或其它应用程序组件的实现里获取一个ContentResolver:
    查询一个内容提供器Querying a Content Provider
    你需要三方面的信息来查询一个内容提供器:
    •用来标识内容提供器的URI
    •你想获取的数据字段的名字
    •这些字段的数据类型
    生成查询Making the query
    你可以使用ContentResolver.query()方法或者Activity.managedQuery()方法来查询一个内容提供器。两种方法使用相同的参数序列,而且都返回一个Cursor对象
    批量更新记录Batch updating records
    要批量更新一组记录(例如,把所有字段中的"NY"改为"New York"),可以传以需要改变的列和值参数来调用ContentResolver.update()方法。
    删除一个记录Deleting a record
    要删除单个记录,可以传以一个特定行的URI参数来调用ContentResolver.delete()方法。
    创建一个内容提供器Creating a Content Provider
    要创建一个内容提供器,你必须:
    •建立一个保存数据的系统。大多数内容提供器使用Android的文件储存方法或SQLite数据库来存放它们的数据,但是你可以用任何你想要的方式来存放数据。Android提供SQLiteOpenHelper类来帮助你创建一个数据库以及SQLiteDatabase类来管理它。
    •扩展ContentProvider类来提供数据访问接口。
      

  3.   

    ContentResoler通过ContentProvider修改SqlLite的数据,ContentProvider是为SqlLite提供接口的,
      

  4.   

    在Android系统中,存储数据的方式一共有5种:
    1.SharedPreferences
    2.文件存储
    3.SQLite数据库存储
    4.ContentProvider
    5.网络    而ContentProvider是一种让多应用程序之间数据交换的一种接口,就是说在一个应用程序里面将一些数据暴露出来,以供外部访问。外部访问就是通过ContentResolver去访问并操作这些被暴露的数据。
        ContentProvider中的里面的数据的存储方式(可以是文件,可以是数据库或其他方式)外界看不到,但是通过它提供的接口可以访问。
        在ContentProvider中,数据都是以表的形式组织的。实现一个ContentProvider需要构建一个数据存储系统,这时候可以用数据库的方式去实现。所以,你才会看到有些地方在用ContentProvider的时候又用了SQLite。
      

  5.   

    补充一下,正是由于ContentProvider中的数据都是以表的形式组织的,所以才会有像数据库一样的增删查改的操作。
      

  6.   

    说的好...ContentResolver是怎么找到对应的Content Provider的呢
      

  7.   


    还有种方式是 Files ,类似Preferences
      

  8.   

    SQLiteDatabase对应用的数据库文件进行操作的类;ContentResolver对其他应用程序提供的数据进行操作的类;ContentProvider用来暴露自己应用的数据,供其他应用能够访问的类;
      

  9.   


    ContentResolver对Content Provider的操作方法都有一个参数Uri的,Uri就相当于网址一样,这样就可以找到啦
      

  10.   

    contentresolver通过Uri找到对应的contentProvider
      

  11.   

    首先sqlite是私有的,只能在自己的应用程序进行增删改查,现在呢,我们需要让别的应用程序也能更改这个数据库的数据,我们就用一个contentprovider把这个数据库的数据封装,这样就可以实现各应用程序共享了,现在回答contentprovider的增删改查和sqlite中的增删改查有什么关系,因为contentprovider的存储方式是以表的形式存储的,但要存储的数据不一定来源于数据库,所以在contentprovider中也要实现增删改查的方法,当你要对数据库中数据进行增删改查时,此时你可以绑定到该数据库,调用数据库自己的增删改查方法;当你要对其他(文件)进行增删改查时,你可以绑定其他。这样就实现了对数据的增删改查。现在回答ContentResoler的增删改查,因为是各应用程序共享,所以我要在B程序中对A程序中的数据进行更改,我就可以调用ContentResoler的增删改查方法。参数是contentprovider的URI(类似给数据的来源定义一个路径,像域名),这样就绑定到了A程序的数据了,就可以增删改查了。不知道这样说能否解决你的困惑。